@beyondwork/docx-react-component 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -104
- package/package.json +66 -15
- package/src/api/public-types.ts +1 -1
- package/src/compare/diff-engine.ts +530 -0
- package/src/compare/export-redlines.ts +162 -0
- package/src/compare/snapshot.ts +37 -0
- package/src/core/commands/index.ts +1 -1
- package/src/core/state/editor-state.ts +2 -2
- package/src/index.ts +45 -0
- package/src/legal/bookmarks.ts +196 -0
- package/src/legal/cross-references.ts +356 -0
- package/src/legal/defined-terms.ts +203 -0
- package/src/runtime/document-runtime.ts +3 -5
- package/src/runtime/table-commands.ts +4 -1
- package/src/runtime/table-schema.ts +17 -2
- package/src/runtime/virtualized-rendering.ts +258 -0
- package/src/ui/WordReviewEditor.tsx +256 -35
- package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
- package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
- package/.codex/config.toml +0 -5
- package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
- package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
- package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
- package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
- package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
- package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
- package/.cursor/mcp.json +0 -7
- package/.github/workflows/ci.yml +0 -35
- package/.mcp.json +0 -7
- package/.openclaw/workspace-state.json +0 -4
- package/.pnpmrc.json +0 -1
- package/.wave-launch.sh +0 -7
- package/.workspace-marker +0 -1
- package/AGENTS.md +0 -78
- package/CHANGELOG.md +0 -177
- package/DESIGN.md +0 -929
- package/HEARTBEAT.md +0 -7
- package/IDENTITY.md +0 -23
- package/SOUL.md +0 -36
- package/TOOLS.md +0 -40
- package/USER.md +0 -17
- package/docs/README.md +0 -107
- package/docs/agents/wave-cont-eval-role.md +0 -36
- package/docs/agents/wave-cont-qa-role.md +0 -52
- package/docs/agents/wave-deploy-verifier-role.md +0 -34
- package/docs/agents/wave-design-role.md +0 -47
- package/docs/agents/wave-documentation-role.md +0 -34
- package/docs/agents/wave-infra-role.md +0 -34
- package/docs/agents/wave-integration-role.md +0 -37
- package/docs/agents/wave-launcher-role.md +0 -41
- package/docs/agents/wave-orchestrator-role.md +0 -52
- package/docs/agents/wave-planner-role.md +0 -39
- package/docs/agents/wave-security-role.md +0 -40
- package/docs/architecture/docx/README.md +0 -10
- package/docs/architecture/future/README.md +0 -8
- package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
- package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
- package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
- package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
- package/docs/comment-redline-overview.md +0 -350
- package/docs/concepts/context7-vs-skills.md +0 -118
- package/docs/concepts/operating-modes.md +0 -91
- package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
- package/docs/concepts/what-is-a-wave.md +0 -217
- package/docs/context7/bundles.json +0 -222
- package/docs/context7/planner-agent/README.md +0 -28
- package/docs/context7/planner-agent/manifest.json +0 -83
- package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
- package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
- package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
- package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
- package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
- package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
- package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
- package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
- package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
- package/docs/evals/arm-templates/README.md +0 -13
- package/docs/evals/arm-templates/full-wave.json +0 -15
- package/docs/evals/arm-templates/single-agent.json +0 -15
- package/docs/evals/benchmark-catalog.json +0 -670
- package/docs/evals/cases/README.md +0 -47
- package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
- package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
- package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
- package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
- package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
- package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
- package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
- package/docs/evals/external-benchmarks.json +0 -85
- package/docs/evals/external-command-config.sample.json +0 -9
- package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
- package/docs/evals/pilots/README.md +0 -47
- package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
- package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
- package/docs/evals/wave-benchmark-program.md +0 -302
- package/docs/guides/planner.md +0 -220
- package/docs/guides/recommendations-0.8.9.md +0 -133
- package/docs/guides/signal-wrappers.md +0 -165
- package/docs/guides/terminal-surfaces.md +0 -96
- package/docs/image copy.png +0 -0
- package/docs/image.png +0 -0
- package/docs/images/image.png +0 -0
- package/docs/legal-feedback-architecture.md +0 -498
- package/docs/plans/component-cutover-matrix.json +0 -1072
- package/docs/plans/component-cutover-matrix.md +0 -307
- package/docs/plans/context7-wave-orchestrator.md +0 -155
- package/docs/plans/current-state.md +0 -198
- package/docs/plans/docx/README.md +0 -9
- package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
- package/docs/plans/examples/wave-example-live-proof.md +0 -435
- package/docs/plans/master-plan.md +0 -224
- package/docs/plans/migration.md +0 -538
- package/docs/plans/operations/README.md +0 -7
- package/docs/plans/operations/wave-10-word-certification.md +0 -87
- package/docs/plans/operations/wave-8-railway-staging.md +0 -153
- package/docs/plans/operations/wave-9-manual-certification.md +0 -73
- package/docs/plans/platform/README.md +0 -9
- package/docs/plans/reference/legal-checklist-coverage.md +0 -258
- package/docs/plans/wave-orchestrator.md +0 -423
- package/docs/plans/waves/README.md +0 -75
- package/docs/plans/waves/completed/wave-0.md +0 -195
- package/docs/plans/waves/completed/wave-1.md +0 -379
- package/docs/plans/waves/completed/wave-10.md +0 -670
- package/docs/plans/waves/completed/wave-11.md +0 -335
- package/docs/plans/waves/completed/wave-12.md +0 -417
- package/docs/plans/waves/completed/wave-13.md +0 -316
- package/docs/plans/waves/completed/wave-14.md +0 -319
- package/docs/plans/waves/completed/wave-15.md +0 -321
- package/docs/plans/waves/completed/wave-16.md +0 -316
- package/docs/plans/waves/completed/wave-17.md +0 -331
- package/docs/plans/waves/completed/wave-18.md +0 -328
- package/docs/plans/waves/completed/wave-2.md +0 -438
- package/docs/plans/waves/completed/wave-3.md +0 -435
- package/docs/plans/waves/completed/wave-4.md +0 -430
- package/docs/plans/waves/completed/wave-5.md +0 -430
- package/docs/plans/waves/completed/wave-6.md +0 -430
- package/docs/plans/waves/completed/wave-7.md +0 -526
- package/docs/plans/waves/completed/wave-8.md +0 -596
- package/docs/plans/waves/completed/wave-9.md +0 -552
- package/docs/plans/waves/deferred/README.md +0 -14
- package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
- package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
- package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
- package/docs/plans/waves/design/README.md +0 -5
- package/docs/plans/waves/design/wave-1-a1.md +0 -309
- package/docs/plans/waves/reviews/README.md +0 -5
- package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
- package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
- package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
- package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
- package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
- package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
- package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
- package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
- package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
- package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
- package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
- package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
- package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
- package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
- package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
- package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
- package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
- package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
- package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
- package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
- package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
- package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
- package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
- package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
- package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
- package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
- package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
- package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
- package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
- package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
- package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
- package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
- package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
- package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
- package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
- package/docs/plans/waves/reviews/wave-8-security.md +0 -47
- package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
- package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
- package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
- package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
- package/docs/plans/waves/specs/README.md +0 -5
- package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
- package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
- package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
- package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
- package/docs/plans/waves/wave-19.md +0 -341
- package/docs/plans/waves/wave-20.md +0 -308
- package/docs/plans/waves/wave-21.md +0 -289
- package/docs/plans/waves/wave-22.md +0 -221
- package/docs/plans/waves/wave-23.md +0 -295
- package/docs/plans/waves/wave-24.md +0 -286
- package/docs/plans/waves/wave-25.md +0 -313
- package/docs/plans/waves/wave-26.md +0 -300
- package/docs/plans/waves/wave-27.md +0 -299
- package/docs/plans/waves/wave-28.md +0 -368
- package/docs/plans/waves/wave-29.md +0 -303
- package/docs/plans/waves/wave-30.md +0 -307
- package/docs/plans/waves/wave-31.md +0 -231
- package/docs/plans/waves/wave-32.md +0 -152
- package/docs/plans/waves/wave-33.md +0 -147
- package/docs/plans/waves/wave-34.md +0 -148
- package/docs/plans/waves/wave-35.md +0 -141
- package/docs/plans/waves/wave-36.md +0 -146
- package/docs/plans/xlsx/README.md +0 -14
- package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
- package/docs/reference/cli-reference.md +0 -600
- package/docs/reference/coordination-and-closure.md +0 -487
- package/docs/reference/deep-research-report (15).md +0 -25
- package/docs/reference/docx/README.md +0 -10
- package/docs/reference/legal-checklist.md +0 -445
- package/docs/reference/live-proof-waves.md +0 -199
- package/docs/reference/ooxml-compliance.md +0 -129
- package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
- package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
- package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
- package/docs/reference/public-api.md +0 -456
- package/docs/reference/repository-guidance.md +0 -58
- package/docs/reference/runtime-config/README.md +0 -182
- package/docs/reference/runtime-config/claude.md +0 -110
- package/docs/reference/runtime-config/codex.md +0 -82
- package/docs/reference/runtime-config/opencode.md +0 -93
- package/docs/reference/sample-waves.md +0 -105
- package/docs/reference/skills.md +0 -237
- package/docs/reference/templates/AGENTS.md +0 -78
- package/docs/reference/templates/HEARTBEAT.md +0 -7
- package/docs/reference/templates/IDENTITY.md +0 -23
- package/docs/reference/templates/SOUL.md +0 -36
- package/docs/reference/templates/TOOLS.md +0 -40
- package/docs/reference/templates/USER.md +0 -17
- package/docs/reference/wave-control.md +0 -184
- package/docs/reference/wave-planning-lessons.md +0 -167
- package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
- package/docs/reference/word-review-editor-ux-guide.md +0 -253
- package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
- package/docs/research/agent-context-sources.md +0 -178
- package/docs/research/coordination-failure-review.md +0 -290
- package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
- package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
- package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
- package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
- package/docs/research/xlsx/raw/README.md +0 -13
- package/docs/roadmap.md +0 -174
- package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
- package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
- package/docs/xlsx-react/README.md +0 -38
- package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
- package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
- package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
- package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
- package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
- package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
- package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
- package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
- package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
- package/examples/README.md +0 -16
- package/memory/MEMORY.md +0 -24
- package/pnpm-workspace.yaml +0 -4
- package/scripts/check-no-authored-js.sh +0 -13
- package/scripts/context7-api-check.sh +0 -65
- package/scripts/context7-export-env.sh +0 -42
- package/scripts/run-context7-mcp.sh +0 -8
- package/scripts/run-workspace-tests.sh +0 -15
- package/scripts/start-wave-10-local.sh +0 -189
- package/scripts/wave-agent-attach.sh +0 -47
- package/scripts/wave-auto-answer.sh +0 -118
- package/scripts/wave-dashboard-attach.sh +0 -13
- package/scripts/wave-launch.sh +0 -273
- package/scripts/wave-overnight-supervisor.sh +0 -145
- package/scripts/wave-status.sh +0 -379
- package/scripts/wave-watch.sh +0 -231
- package/services/README.md +0 -17
- package/services/openxml-validator/Dockerfile +0 -29
- package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
- package/services/openxml-validator/Program.cs +0 -436
- package/services/openxml-validator/README.md +0 -152
- package/services/openxml-validator/railway.json +0 -16
- package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
- package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
- package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
- package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
- package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
- package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
- package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
- package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
- package/services/react-word-editor/Dockerfile +0 -26
- package/services/react-word-editor/README.md +0 -254
- package/services/react-word-editor/app/api/certification/route.ts +0 -79
- package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
- package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
- package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
- package/services/react-word-editor/app/api/exports/route.ts +0 -81
- package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
- package/services/react-word-editor/app/api/health/route.ts +0 -70
- package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
- package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
- package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
- package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
- package/services/react-word-editor/app/api/uploads/route.ts +0 -70
- package/services/react-word-editor/app/api/validate/route.ts +0 -310
- package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
- package/services/react-word-editor/app/certification/page.tsx +0 -32
- package/services/react-word-editor/app/dashboard/page.tsx +0 -7
- package/services/react-word-editor/app/demo/page.tsx +0 -30
- package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
- package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
- package/services/react-word-editor/app/fixtures/page.tsx +0 -7
- package/services/react-word-editor/app/globals.css +0 -121
- package/services/react-word-editor/app/layout.tsx +0 -32
- package/services/react-word-editor/app/page.tsx +0 -30
- package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
- package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
- package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
- package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
- package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
- package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
- package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
- package/services/react-word-editor/lib/certification-bundle.ts +0 -796
- package/services/react-word-editor/lib/certification-store.ts +0 -661
- package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
- package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
- package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
- package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
- package/services/react-word-editor/lib/editor-session.ts +0 -228
- package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
- package/services/react-word-editor/lib/harness-client.ts +0 -347
- package/services/react-word-editor/lib/harness-config.json +0 -30
- package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
- package/services/react-word-editor/lib/harness-config.ts +0 -21
- package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
- package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
- package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
- package/services/react-word-editor/lib/private-mode.ts +0 -61
- package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
- package/services/react-word-editor/lib/regression-report.ts +0 -896
- package/services/react-word-editor/lib/run-artifacts.ts +0 -934
- package/services/react-word-editor/lib/run-history.ts +0 -755
- package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
- package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
- package/services/react-word-editor/lib/storage.ts +0 -953
- package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
- package/services/react-word-editor/lib/validator-client.ts +0 -95
- package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
- package/services/react-word-editor/middleware.ts +0 -35
- package/services/react-word-editor/next-env.d.ts +0 -6
- package/services/react-word-editor/next.config.mjs +0 -15
- package/services/react-word-editor/package.json +0 -38
- package/services/react-word-editor/postcss.config.mjs +0 -8
- package/services/react-word-editor/railway.json +0 -21
- package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
- package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
- package/services/react-word-editor/tsconfig.json +0 -39
- package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
- package/skills/README.md +0 -48
- package/skills/domain-docx-compatibility/SKILL.md +0 -44
- package/skills/domain-docx-compatibility/skill.json +0 -19
- package/skills/domain-editor-architecture/SKILL.md +0 -49
- package/skills/domain-editor-architecture/skill.json +0 -19
- package/skills/domain-legal-review/SKILL.md +0 -39
- package/skills/domain-legal-review/skill.json +0 -19
- package/skills/provider-aws/SKILL.md +0 -117
- package/skills/provider-aws/adapters/claude.md +0 -1
- package/skills/provider-aws/adapters/codex.md +0 -1
- package/skills/provider-aws/references/service-verification.md +0 -39
- package/skills/provider-aws/skill.json +0 -54
- package/skills/provider-custom-deploy/SKILL.md +0 -64
- package/skills/provider-custom-deploy/skill.json +0 -50
- package/skills/provider-docker-compose/SKILL.md +0 -96
- package/skills/provider-docker-compose/adapters/local.md +0 -1
- package/skills/provider-docker-compose/skill.json +0 -53
- package/skills/provider-github-release/SKILL.md +0 -121
- package/skills/provider-github-release/adapters/claude.md +0 -1
- package/skills/provider-github-release/adapters/codex.md +0 -1
- package/skills/provider-github-release/skill.json +0 -55
- package/skills/provider-kubernetes/SKILL.md +0 -143
- package/skills/provider-kubernetes/adapters/claude.md +0 -1
- package/skills/provider-kubernetes/adapters/codex.md +0 -1
- package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
- package/skills/provider-kubernetes/skill.json +0 -52
- package/skills/provider-railway/SKILL.md +0 -123
- package/skills/provider-railway/adapters/claude.md +0 -1
- package/skills/provider-railway/adapters/codex.md +0 -1
- package/skills/provider-railway/adapters/local.md +0 -1
- package/skills/provider-railway/adapters/opencode.md +0 -1
- package/skills/provider-railway/references/verification-commands.md +0 -39
- package/skills/provider-railway/skill.json +0 -71
- package/skills/provider-ssh-manual/SKILL.md +0 -97
- package/skills/provider-ssh-manual/skill.json +0 -54
- package/skills/repo-coding-rules/SKILL.md +0 -55
- package/skills/repo-coding-rules/skill.json +0 -34
- package/skills/role-cont-eval/SKILL.md +0 -91
- package/skills/role-cont-eval/adapters/codex.md +0 -1
- package/skills/role-cont-eval/skill.json +0 -36
- package/skills/role-cont-qa/SKILL.md +0 -100
- package/skills/role-cont-qa/adapters/claude.md +0 -1
- package/skills/role-cont-qa/skill.json +0 -36
- package/skills/role-deploy/SKILL.md +0 -97
- package/skills/role-deploy/skill.json +0 -36
- package/skills/role-design/SKILL.md +0 -50
- package/skills/role-design/skill.json +0 -36
- package/skills/role-documentation/SKILL.md +0 -76
- package/skills/role-documentation/skill.json +0 -36
- package/skills/role-implementation/SKILL.md +0 -45
- package/skills/role-implementation/skill.json +0 -36
- package/skills/role-infra/SKILL.md +0 -81
- package/skills/role-infra/skill.json +0 -36
- package/skills/role-integration/SKILL.md +0 -91
- package/skills/role-integration/skill.json +0 -36
- package/skills/role-planner/SKILL.md +0 -39
- package/skills/role-planner/skill.json +0 -21
- package/skills/role-research/SKILL.md +0 -65
- package/skills/role-research/skill.json +0 -36
- package/skills/role-security/SKILL.md +0 -60
- package/skills/role-security/skill.json +0 -36
- package/skills/runtime-claude/SKILL.md +0 -66
- package/skills/runtime-claude/skill.json +0 -36
- package/skills/runtime-codex/SKILL.md +0 -58
- package/skills/runtime-codex/skill.json +0 -36
- package/skills/runtime-local/SKILL.md +0 -46
- package/skills/runtime-local/skill.json +0 -36
- package/skills/runtime-opencode/SKILL.md +0 -58
- package/skills/runtime-opencode/skill.json +0 -36
- package/skills/signal-hygiene/SKILL.md +0 -51
- package/skills/signal-hygiene/skill.json +0 -20
- package/skills/tui-design/SKILL.md +0 -77
- package/skills/tui-design/references/tui-design.md +0 -259
- package/skills/tui-design/skill.json +0 -36
- package/skills/wave-core/SKILL.md +0 -141
- package/skills/wave-core/references/marker-syntax.md +0 -70
- package/skills/wave-core/skill.json +0 -35
- package/test/README.md +0 -16
- package/test/core/formatting-commands.test.ts +0 -285
- package/test/core/image-commands.test.ts +0 -298
- package/test/core/mapping.test.ts +0 -186
- package/test/core/text-commands.test.ts +0 -176
- package/test/fixtures/docx/F01-basic-contract.docx +0 -0
- package/test/fixtures/docx/F01-basic-contract.md +0 -33
- package/test/fixtures/docx/F02-headings-styles.docx +0 -0
- package/test/fixtures/docx/F02-headings-styles.md +0 -33
- package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
- package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
- package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
- package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
- package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
- package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
- package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
- package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
- package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
- package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
- package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
- package/test/fixtures/docx/F08-hyperlinks.md +0 -33
- package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
- package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
- package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
- package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
- package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
- package/test/fixtures/docx/F11-redlines-basic.md +0 -33
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
- package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
- package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
- package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
- package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
- package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
- package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
- package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
- package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
- package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
- package/test/fixtures/docx/F18-content-controls-template.md +0 -33
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
- package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
- package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
- package/test/fixtures/docx/README.md +0 -74
- package/test/fixtures/docx/certification-manifest.json +0 -104
- package/test/fixtures/docx/fixtures.manifest.json +0 -196
- package/test/fixtures/encrypted-docx/README.md +0 -27
- package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
- package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
- package/test/fixtures/scenarios/docx/README.md +0 -25
- package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
- package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
- package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
- package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
- package/test/formats/xlsx/model/workbook.test.ts +0 -669
- package/test/helpers/dom-setup.ts +0 -124
- package/test/io/comment-roundtrip.test.ts +0 -272
- package/test/io/complex-content-roundtrip.test.ts +0 -632
- package/test/io/docx-compatibility-regression.test.ts +0 -199
- package/test/io/docx-session.test.ts +0 -1495
- package/test/io/footnotes-roundtrip.test.ts +0 -318
- package/test/io/headers-footers-roundtrip.test.ts +0 -547
- package/test/io/numbering-roundtrip.test.ts +0 -234
- package/test/io/package-reader.test.ts +0 -199
- package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
- package/test/io/preserved-package-roundtrip.test.ts +0 -365
- package/test/io/property-completeness.test.ts +0 -292
- package/test/io/revision-roundtrip.test.ts +0 -347
- package/test/io/structural-blocks.test.ts +0 -202
- package/test/io/table-media-roundtrip.test.ts +0 -448
- package/test/io/table-properties-roundtrip.test.ts +0 -569
- package/test/io/table-roundtrip.test.ts +0 -302
- package/test/io/text-roundtrip.test.ts +0 -344
- package/test/model/canonical-document.test.ts +0 -285
- package/test/preservation/opaque-fragment-store.test.ts +0 -121
- package/test/preservation/package-preservation.test.ts +0 -395
- package/test/preservation/store.test.ts +0 -84
- package/test/review/comment-remapping.test.ts +0 -220
- package/test/review/comment-store.test.ts +0 -180
- package/test/review/move-revisions.test.ts +0 -143
- package/test/review/property-change-revisions.test.ts +0 -225
- package/test/review/revision-actions.test.ts +0 -330
- package/test/review/revision-store.test.ts +0 -193
- package/test/runtime/session-capabilities.test.ts +0 -260
- package/test/runtime/table-commands.test.ts +0 -356
- package/test/runtime/table-schema.test.ts +0 -221
- package/test/runtime/tracked-changes-toggle.test.ts +0 -107
- package/test/ui/comment-review-surface.test.tsx +0 -114
- package/test/ui/reduced-motion-toggle.test.tsx +0 -137
- package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
- package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
- package/test/ui/word-review-editor.test.js +0 -188
- package/test/ui/word-review-editor.test.tsx +0 -280
- package/test/ui-tailwind/search-plugin.test.ts +0 -286
- package/test/validation/compatibility-engine.test.ts +0 -336
- package/test/validation/compatibility-report.test.ts +0 -189
- package/test/validation/low-priority-word-surfaces.test.ts +0 -282
- package/test/validation/malformed-doc.test.ts +0 -113
- package/test-results/.last-run.json +0 -4
- package/wave.config.json +0 -406
|
@@ -1,436 +0,0 @@
|
|
|
1
|
-
# XLSX Fixture Corpus, Scenario Program, and Certification Plan
|
|
2
|
-
|
|
3
|
-
This research paper is source material.
|
|
4
|
-
|
|
5
|
-
Canonical repo-aligned planned doc:
|
|
6
|
-
|
|
7
|
-
- `docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md`
|
|
8
|
-
|
|
9
|
-
## Interpretation of the problem
|
|
10
|
-
|
|
11
|
-
You’re not asking how to build an XLSX editor. You’re asking for the **permanent compatibility program** that keeps an XLSX editor honest over time: a fixture corpus, scenario runner, automated validation, and manual Excel certification gates that enforce the principle “exported files must reopen in recent Excel environments without repair prompts or silent supported-content loss.”
|
|
12
|
-
|
|
13
|
-
Key constraints that drive this plan:
|
|
14
|
-
|
|
15
|
-
An `.xlsx` file is an **OOXML / Open Packaging Conventions (OPC) package** (ZIP physical mapping; parts + relationships as a directed graph), not “some XML.” The package has required structural items like the content types part and package relationships part, with strict relationship-part naming conventions.
|
|
16
|
-
|
|
17
|
-
The editor must support **import → runtime edit → export → reopen** as the standard for “supported.” Where that cannot be guaranteed, the feature must be explicitly classified as **preserve-only** or **unsupported-fatal**, not “best effort.” This is aligned with how the OOXML ecosystem expects forward compatibility via **Markup Compatibility and Extensibility** mechanisms (e.g., `mc:Ignorable`, `AlternateContent`, `extLst`) and vendor extensions (notably Excel’s `.xlsx` extensions) so older consumers can ignore unknown markup without breaking.
|
|
18
|
-
|
|
19
|
-
Schema conformance is necessary but insufficient: the Open XML SDK exposes validators (e.g., `OpenXmlValidator`) and strongly-typed part models, but Excel can still surface “repair” behavior even when validators pass, and conversely validators can flag issues that Excel tolerates. Therefore, “Excel reopen without repair prompts” must be a **manual certification** (and later possibly semi-automated) release gate.
|
|
20
|
-
|
|
21
|
-
Source constraints for this response: you asked to start with your GitHub connector and the repo `bwllaming/docx-react-component`, but the GitHub connector was not actually accessible in this environment (tooling reported no repo selection / no results), so this plan is built from primary OOXML/OPC sources and Microsoft/OpenXML documentation instead.
|
|
22
|
-
|
|
23
|
-
## Research plan
|
|
24
|
-
|
|
25
|
-
Information that must be true to produce an implementation-ready compatibility program:
|
|
26
|
-
|
|
27
|
-
OPC/OOXML packaging invariants to validate for every fixture (content types stream, relationship graph invariants, relationship part naming rules, minimal SpreadsheetML package structure).
|
|
28
|
-
|
|
29
|
-
SpreadsheetML part topology and “minimum workbook scenario” (workbook + worksheets + relationship IDs), plus major feature part families: shared strings, styles, calc chain, tables, pivot tables/caches, conditional formatting, formulas, drawings/charts.
|
|
30
|
-
|
|
31
|
-
Excel-specific extensions and forward-compat contract: which parts and relationships are used by Excel extensions (e.g., threaded comments; slicers; persons list; named sheet views), what “MUST” relationships exist, and what compatibility mechanisms Excel relies on (`mc:Ignorable`, `extLst`).
|
|
32
|
-
|
|
33
|
-
Validation tooling surface area: Open XML SDK creation and validation entrypoints; validator configuration by Office version (e.g., `FileFormatVersions` enum).
|
|
34
|
-
|
|
35
|
-
Host matrix facts that matter for certification and “reopen expectations”: which Excel versions/products are relevant, worksheet limits for stress fixtures, and cross-origin export realities (Google Sheets and LibreOffice both export `.xlsx`, but conversion limitations exist and must be treated as a hostile input class).
|
|
36
|
-
|
|
37
|
-
## Findings
|
|
38
|
-
|
|
39
|
-
OPC structure is graph-first: packages are navigated starting at `/_rels/.rels`, then following relationships to locate parts; relationship parts live in `_rels` folders and are named by appending `.rels` to the source part’s name. This implies fixture validation must treat **missing / dangling / mis-targeted relationships** as first-class failures independent of XML element validity.
|
|
40
|
-
|
|
41
|
-
A SpreadsheetML package has hard minimums: it “shall contain” at least a content-type item and package-relationship item, with a required relationship to exactly one workbook part, and worksheets referenced by relationship IDs from the workbook. The Microsoft Open XML SDK documentation mirrors this minimum structure (workbook part + at least one worksheet part).
|
|
42
|
-
|
|
43
|
-
The ecosystem expects “future content” survival: SpreadsheetML frequently uses extension/compatibility constructs (e.g., `extLst`, `mc:Ignorable`) and Excel documents can embed non-core parts and markup that are required for fidelity in newer Excel. Microsoft’s `.xlsx` extensions spec explicitly requires that compatibility mechanisms like `Ignorable`, `AlternateContent`, or `extLst` be used to maintain compatibility with base ISO/IEC 29500 consumers. A concrete example: the Excel threaded comments feature is stored in a dedicated part type with a defined content type, sourced via a relationship from the worksheet, and includes additional reconciliation behavior with legacy comment placeholders.
|
|
44
|
-
|
|
45
|
-
Validation has two different “truths”: OpenXmlValidator exists, is configurable by Office version, and is useful for schema-level sanity checks, but real-world evidence (and developer reports) show Excel can still repair files even when OpenXmlValidator reports no errors. That means the certification program must treat OpenXmlValidator as **necessary but not sufficient**, and include explicit Excel-open certification.
|
|
46
|
-
|
|
47
|
-
Cross-origin exporters are guaranteed fixture sources, not edge cases:
|
|
48
|
-
- Google Sheets explicitly supports downloading spreadsheets as “Microsoft Excel (.xlsx).”
|
|
49
|
-
- LibreOffice explicitly states it can load/save Office Open XML formats (including `.xlsx`) while warning that complex Microsoft Office features can be handled differently or be unsupported, requiring manual reformatting.
|
|
50
|
-
These exporters therefore produce “valid-looking but hostile” packages that your editor must either support end-to-end, preserve-only, or reject as unsupported-fatal.
|
|
51
|
-
|
|
52
|
-
Performance/stress fixtures must be aligned to Excel’s published limits: Microsoft documents worksheet limits such as 1,048,576 rows by 16,384 columns, maximum characters per cell, and limits on unique cell formats. Stress fixtures should be sized to trigger algorithmic pitfalls (sharedStrings explosion, style record blowups, dense sheetData) without requiring maximum theoretical size.
|
|
53
|
-
|
|
54
|
-
## Recommended design / decisions
|
|
55
|
-
|
|
56
|
-
This section is the core: the fixture corpus and certification plan are as important to architecture as your runtime state model, because they define “what correctness is.”
|
|
57
|
-
|
|
58
|
-
### Decision: split the corpus into “release-gate fixtures” and “representative scenarios,” with explicit support classification
|
|
59
|
-
|
|
60
|
-
**Release-gate fixtures** are the permanent, minimal set that blocks a release if they regress. They must be deterministic, small, and cover every supported feature and every preservation contract. Their goal is to catch correctness regressions early, not to be exhaustive.
|
|
61
|
-
|
|
62
|
-
**Representative scenarios** are larger, more realistic workbooks (including cross-origin exports) used for broader confidence, manual exploration, and periodic certification. They can be noisy and are allowed to evolve.
|
|
63
|
-
|
|
64
|
-
Each fixture must carry an explicit classification per feature scope:
|
|
65
|
-
|
|
66
|
-
- **supported**: must survive import → edit (at least a no-op or scoped edit) → export → reopen in Excel without repair prompts, and with specified semantics preserved.
|
|
67
|
-
- **preserve-only**: editor must load and round-trip without dropping content, but must not claim correctness for edits affecting that feature; the UI should lock/warn. (This is aligned with OOXML forward-compat constructs and Excel extensions: you will see `mc:Ignorable`, `extLst`, and vendor parts you don’t implement.)
|
|
68
|
-
- **unsupported-fatal**: the editor must refuse to export (block/fail) if a user attempts to load or modify the workbook in a way that cannot be safely round-tripped without causing Excel repair prompts or silent loss.
|
|
69
|
-
|
|
70
|
-
### Decision: preservation is tested structurally (package graph + byte preservation for unknown parts), not only semantically
|
|
71
|
-
|
|
72
|
-
Because OPC navigation is relationship-graph-based and relationship parts have strict naming conventions, the lowest-level preservation contract is:
|
|
73
|
-
|
|
74
|
-
- Every unknown package part and relationship must be preserved in the output OPC graph, unless explicitly stripped by a declared policy.
|
|
75
|
-
- Relationship part naming and placement must remain valid (e.g., `/a/b/_rels/c.xml.rels`).
|
|
76
|
-
- Content types must still map every part; content types are required for consumers and are central to OPC characterization.
|
|
77
|
-
|
|
78
|
-
For unknown parts, the only safe automated assertion is **byte-for-byte identity** (or, if your pipeline normalizes ZIP ordering/deflate metadata, at least a stable hash of the part payload stream). For known parts, allow canonicalization (namespace prefix differences, attribute ordering) but enforce semantic invariants.
|
|
79
|
-
|
|
80
|
-
### Decision: automated validation is multi-layered and version-targeted; Excel-open certification is the release truth
|
|
81
|
-
|
|
82
|
-
Automated validation layers:
|
|
83
|
-
|
|
84
|
-
- **OPC structural validator**: checks existence and correctness of `[Content_Types].xml`, `/_rels/.rels`, relationship-part naming conventions, reachable part graph, dangling relationship targets, invalid TargetMode usage, and content-type coverage.
|
|
85
|
-
- **SpreadsheetML schema/structure baseline**: minimum workbook scenario validation (workbook, sheets, worksheet parts), plus constraints like “one Worksheet part per worksheet.”
|
|
86
|
-
- **Open XML SDK validator lane** (CI optional but strongly recommended): run `OpenXmlValidator` against exported packages for multiple file format versions (Office2007…Microsoft365). This catches a class of schema errors and version-gating differences.
|
|
87
|
-
|
|
88
|
-
Manual Excel certification:
|
|
89
|
-
|
|
90
|
-
- For each release candidate, open and save exported fixtures in recent Excel hosts (Windows/Mac/Web minimum) and verify: no repair prompt, no repair log, and no silent loss of supported content (checked by predeclared “audit fields” per fixture).
|
|
91
|
-
- This is required because schema validators are not equivalent to Excel acceptance.
|
|
92
|
-
|
|
93
|
-
### Decision: host matrix is explicit, and “Excel for Microsoft 365” is the primary bar
|
|
94
|
-
|
|
95
|
-
Your stated standard is “recent Excel environments.” Microsoft’s own Open XML format guidance is scoped across Microsoft 365 and recent perpetual releases. The certification host matrix must include:
|
|
96
|
-
|
|
97
|
-
- Excel Desktop on Windows (Microsoft 365 current channel) — primary truth bar.
|
|
98
|
-
- Excel Desktop on macOS (Microsoft 365) — necessary for feature parity differences (rendering, fonts, some chart behaviours).
|
|
99
|
-
- Excel for the web — important because Excel web-origin files are a required corpus category, and because web can reserialize workbooks differently.
|
|
100
|
-
|
|
101
|
-
Optional expansion hosts (phase-based): Excel LTSC/perpetual (e.g., 2021/2024), and at least one “older but still common” version if your customers demand it.
|
|
102
|
-
|
|
103
|
-
### Decision: waves/phases aligned to feature support maturity and fixture enforcement
|
|
104
|
-
|
|
105
|
-
Wave planning prevents “premature support claims.” Example alignment:
|
|
106
|
-
|
|
107
|
-
- **Wave 0 (Foundation)**: OPC correctness + minimal workbook + basic grid editing + styles baseline; unknown part preservation with strict byte preservation.
|
|
108
|
-
- **Wave 1 (Spreadsheet core)**: formulas, shared strings, styles, merged cells, freeze panes, filters, hyperlinks, notes/comments (legacy).
|
|
109
|
-
- **Wave 2 (Structured features)**: tables, conditional formatting, data validation, drawings/images.
|
|
110
|
-
- **Wave 3 (Advanced Excel objects)**: charts, pivot tables, slicers, threaded comments, data model — initially preserve-only unless you also implement the coupled parts/relationships and Excel’s behavioral invariants.
|
|
111
|
-
|
|
112
|
-
## Risks and open questions
|
|
113
|
-
|
|
114
|
-
Excel behavior drift vs standard: Excel implements ISO/ECMA plus extensions and product behaviors that change over time; Microsoft provides “implementation information” documents for ECMA-376 and ISO/IEC 29500 support, but some materials require authorization in certain contexts. You should expect mismatches and treat Excel as the arbiter.
|
|
115
|
-
|
|
116
|
-
Validator mismatch risk: `OpenXmlValidator` can be version-targeted but will not guarantee Excel-open success; relying on it as a gate will produce false confidence.
|
|
117
|
-
|
|
118
|
-
Cross-origin hostility: Google Sheets and LibreOffice exports are explicitly supported workflows, but both can produce edge-case constructs; LibreOffice explicitly warns about conversion challenges and unsupported features. Your corpus must include these to prevent “works on Excel-made files only” bias.
|
|
119
|
-
|
|
120
|
-
Preserve-only complexity: Preservation is not free. If your editor rewrites parts it doesn’t understand (or drops unrecognized relationships), you can easily produce Excel repair prompts or quiet content loss. This is why unknown-part fixtures must be first-class and release-gated. The risk is highest in areas where Excel uses extension parts and compatibility constructs such as threaded comments and their legacy placeholders.
|
|
121
|
-
|
|
122
|
-
“Malformed package” scope question: decide what “malformed” means for your product. Some malformed inputs should be rejected immediately (unsupported-fatal), but others might be salvageable as preserve-only under a “best-effort import with warnings” mode. OPC and minimum workbook requirements give you the hard floor for “cannot proceed.”
|
|
123
|
-
|
|
124
|
-
Stress fixture realism: Excel’s published worksheet limits are enormous; fixtures near those maxima are hard to keep deterministic and will be slow in CI. The open question is what practical “large” sizes match your runtime constraints while still surfacing algorithmic performance failures.
|
|
125
|
-
|
|
126
|
-
## Concrete deliverable in the requested format
|
|
127
|
-
|
|
128
|
-
This is the repo-ready spec you can drop into a new `xlsx-compat` or `fixtures/` directory and implement against.
|
|
129
|
-
|
|
130
|
-
### Repository layout
|
|
131
|
-
|
|
132
|
-
- `fixtures/`
|
|
133
|
-
- `README.md` (how to run corpus + certification)
|
|
134
|
-
- `schema/fixture-metadata.schema.json`
|
|
135
|
-
- `schema/scenario-run.schema.json`
|
|
136
|
-
- `gates/`
|
|
137
|
-
- `release-gate-manifest.json` (ordered list of gate fixture IDs)
|
|
138
|
-
- `scenario-manifest.json` (grouped scenario sets)
|
|
139
|
-
- `cases/<fixtureId>/`
|
|
140
|
-
- `input/original.xlsx` (canonical “as received”)
|
|
141
|
-
- `input/origin-notes.md` (creation steps + origin app/version)
|
|
142
|
-
- `expected/expectations.json` (expected results)
|
|
143
|
-
- `expected/part-hashes.json` (hashes for preserve-only parts)
|
|
144
|
-
- `expected/audit.xlsx.json` (optional: expected cell/style audits)
|
|
145
|
-
- `scripts/scenario.ts` (optional: scenario program for edit steps)
|
|
146
|
-
- `artifacts/` (generated outputs per run; ignored by git)
|
|
147
|
-
- `tools/`
|
|
148
|
-
- `fixture-runner/` (Node CLI: import → edit → export → validate)
|
|
149
|
-
- `opc-lint/` (OPC structural validator)
|
|
150
|
-
- `excel-cert/` (manual certification harness + checklists)
|
|
151
|
-
- `reports/`
|
|
152
|
-
- `latest/` (CI outputs + Excel cert logs archived per release)
|
|
153
|
-
|
|
154
|
-
### Fixture metadata schema (authoritative contract)
|
|
155
|
-
|
|
156
|
-
Each fixture has a `fixture.json` embedded into `expected/expectations.json` under `meta`:
|
|
157
|
-
|
|
158
|
-
**Required fields**
|
|
159
|
-
|
|
160
|
-
- `id`: string (stable, kebab-case, never reused)
|
|
161
|
-
- `title`: string
|
|
162
|
-
- `category`: one of the minimum categories below (multi-valued allowed)
|
|
163
|
-
- `origin`:
|
|
164
|
-
- `producer`: enum: `excel-desktop-win`, `excel-desktop-mac`, `excel-web`, `google-sheets`, `libreoffice-calc`, `generated`, `third-party`
|
|
165
|
-
- `producerVersion`: string (freeform; required for non-generated)
|
|
166
|
-
- `createdAt`: ISO date
|
|
167
|
-
- `creationSteps`: string (human instructions)
|
|
168
|
-
- `size`:
|
|
169
|
-
- `bytes`: integer
|
|
170
|
-
- `sheets`: integer
|
|
171
|
-
- `usedRangeSummary`: per sheet, `(maxRow, maxCol, usedCells)`
|
|
172
|
-
- `featureFlags`: map of feature → `supported|preserve-only|unsupported-fatal`
|
|
173
|
-
- `expectedImport`:
|
|
174
|
-
- `result`: enum `ok|warn|block|fail`
|
|
175
|
-
- `warnings`: array of stable warning codes
|
|
176
|
-
- `locks`: array of lock codes (UI should lock these features)
|
|
177
|
-
- `expectedExport`:
|
|
178
|
-
- `result`: enum `ok|warn|block|fail`
|
|
179
|
-
- `warnings`: array
|
|
180
|
-
- `preservationContract`:
|
|
181
|
-
- `unknownPartsPolicy`: `preserve-bytes` (default) | `strip-with-manifest` (rare)
|
|
182
|
-
- `partHashAlgorithm`: `sha256`
|
|
183
|
-
- `mustPreserveParts`: array of OPC part names (exact)
|
|
184
|
-
- `mustPreserveRelationships`: array of `{sourcePartName, relType, target}` triples
|
|
185
|
-
- `excelCertification`:
|
|
186
|
-
- `gateLevel`: `release-gate` | `scenario-only`
|
|
187
|
-
- `requiredHosts`: array from the host matrix
|
|
188
|
-
- `openChecks`: checklist IDs
|
|
189
|
-
- `saveChecks`: checklist IDs (if “open+save” is required)
|
|
190
|
-
|
|
191
|
-
**Stable warning/lock vocabulary (shared across product + tests)**
|
|
192
|
-
These are the compliance states you require (preserve, lock, warn, block, fail), made testable:
|
|
193
|
-
|
|
194
|
-
- `warn/*`: e.g. `warn/unsupported-feature-present`, `warn/will-preserve-only-pivot`, `warn/calcchain-dropped`
|
|
195
|
-
- `lock/*`: e.g. `lock/pivot-editing`, `lock/threaded-comments-editing`, `lock/protection-locked`
|
|
196
|
-
- `block/*`: e.g. `block/malformed-opc`, `block/encrypted-package`, `block/unsupported-fatal-feature`
|
|
197
|
-
- `fail/*`: internal invariant breaks (export must not proceed)
|
|
198
|
-
|
|
199
|
-
### Minimum fixture categories and required coverage
|
|
200
|
-
|
|
201
|
-
The corpus must include at least the following **minimum categories**, each split into **release-gate fixtures** (small, deterministic) and **scenario fixtures** (realistic, possibly larger). The list below is not a loose brainstorm; it defines *what must exist* and what gets gated.
|
|
202
|
-
|
|
203
|
-
For each category: create **at least 2 release-gate fixtures** (one “clean”, one “hostile/edge”), and **at least 1 representative scenario**.
|
|
204
|
-
|
|
205
|
-
**Simple sheets**
|
|
206
|
-
- Gate fixtures:
|
|
207
|
-
- `minimal-blank-1sheet`: minimum workbook scenario (workbook + one sheet + basic sheetData).
|
|
208
|
-
- `cells-types-mix`: numbers, strings (sharedStrings), booleans, dates (as numeric + format), blanks.
|
|
209
|
-
- Scenarios:
|
|
210
|
-
- `simple-budget-sheet`: realistic grid with formats and totals.
|
|
211
|
-
|
|
212
|
-
**Multi-sheet workbooks**
|
|
213
|
-
- Gate fixtures: 3+ sheets with cross-sheet references; hidden sheet; veryHidden sheet.
|
|
214
|
-
- Scenarios: workbook with named ranges and hyperlinks across sheets.
|
|
215
|
-
|
|
216
|
-
**Style-heavy files**
|
|
217
|
-
- Gate fixtures:
|
|
218
|
-
- `styles-baseline`: fonts/fills/borders/number formats; verify styles part round-trip and “unique cell formats” stress within reason (avoid Excel’s 65,490 unique format ceiling in gates).
|
|
219
|
-
- `conditional-numberformats`: mixed date/currency/percent.
|
|
220
|
-
- Scenario: “design-heavy report” workbook.
|
|
221
|
-
|
|
222
|
-
**Formula-heavy files**
|
|
223
|
-
- Gate fixtures:
|
|
224
|
-
- `formula-arithmetic`: relative/absolute refs, ranges, SUM/IF.
|
|
225
|
-
- `formula-cross-sheet`: 3D refs; named ranges.
|
|
226
|
-
- Scenario: model sheet that forces recalculation and checks cached results. (Be explicit whether your editor recalculates or preserves cached values.)
|
|
227
|
-
|
|
228
|
-
**Merged cells**
|
|
229
|
-
- Gate fixtures:
|
|
230
|
-
- `merge-rectangular`: standard merges with styles.
|
|
231
|
-
- `merge-overlap-invalid`: malformed merge definitions → expectedImport `block` or `warn` depending on salvage policy.
|
|
232
|
-
- Scenario: printable layout with merged headers.
|
|
233
|
-
|
|
234
|
-
**Comments/notes**
|
|
235
|
-
- Gate fixtures:
|
|
236
|
-
- `legacy-notes`: classic comments/notes stored in the standard comment mechanisms.
|
|
237
|
-
- `threaded-comments-preserve-only`: threaded comments part + legacy placeholders; editing locked; preserve-only.
|
|
238
|
-
- Scenario: collaboration annotation workbook exported from Excel web.
|
|
239
|
-
|
|
240
|
-
**Hyperlinks**
|
|
241
|
-
- Gate fixtures: internal hyperlink (sheet/cell), external hyperlink (URL, mailto).
|
|
242
|
-
- Scenario: workbook used as a navigation hub.
|
|
243
|
-
|
|
244
|
-
**Tables**
|
|
245
|
-
- Gate fixtures: one structured table with header row; filters; table styles.
|
|
246
|
-
- Scenario: import from a business report exported by another system.
|
|
247
|
-
|
|
248
|
-
**Filters/frozen panes**
|
|
249
|
-
- Gate fixtures: autoFilter + freeze panes + split panes; verify view state survives.
|
|
250
|
-
- Scenario: large table with frozen headers.
|
|
251
|
-
|
|
252
|
-
**Data validation**
|
|
253
|
-
- Gate fixtures: list validation (dropdown), numeric range, custom formula validation.
|
|
254
|
-
- Scenario: form-like sheet mapping to validations.
|
|
255
|
-
|
|
256
|
-
**Conditional formatting**
|
|
257
|
-
- Gate fixtures: simple color scale + icon set + formula-based rule.
|
|
258
|
-
- Scenario: KPI dashboard.
|
|
259
|
-
|
|
260
|
-
**Images/drawings**
|
|
261
|
-
- Gate fixtures:
|
|
262
|
-
- `image-anchored`: one image anchored to cells (drawing part relationships).
|
|
263
|
-
- `unknown-drawing-extension`: include ignorable extensions around drawing markup; preserve-only.
|
|
264
|
-
- Scenario: marketing sheet with multiple images.
|
|
265
|
-
|
|
266
|
-
**Charts**
|
|
267
|
-
- Gate fixtures: one basic chart linked to a data range; verify chart parts + drawing relationships survive.
|
|
268
|
-
- Scenario: dashboard with multiple chart types.
|
|
269
|
-
- Default classification: **preserve-only** until you can guarantee edits won’t break chart caches/relationships.
|
|
270
|
-
|
|
271
|
-
**Pivot tables**
|
|
272
|
-
- Gate fixtures: existing pivot table + cache parts; preserve-only by default.
|
|
273
|
-
- Scenario: pivot workbook exported from Excel desktop.
|
|
274
|
-
- Upgrade to supported only when you can maintain pivot cache integrity and Excel-open behavior.
|
|
275
|
-
|
|
276
|
-
**Workbook/sheet protection**
|
|
277
|
-
- Gate fixtures:
|
|
278
|
-
- `sheet-protection`: protected worksheet with unlockable ranges.
|
|
279
|
-
- `workbook-protection`: structure protected.
|
|
280
|
-
- Classification: If you cannot correctly update hashes/flags when editing, treat as **lock + preserve-only** or **unsupported-fatal** for edits that would violate protection semantics.
|
|
281
|
-
|
|
282
|
-
**Unknown OOXML / unknown package parts**
|
|
283
|
-
- Gate fixtures (these are non-negotiable):
|
|
284
|
-
- `unknown-part-unreferenced`: extra part not referenced by any relationship (tests whether your exporter drops “garbage”; expected behavior: preserve if policy says so, or strip only with explicit manifest).
|
|
285
|
-
- `unknown-part-referenced`: unknown part reachable via relationships from workbook/worksheet; must be preserved and relationship graph must remain valid.
|
|
286
|
-
- `mc-ignorable-markup`: ignorable namespaces in worksheet/drawing; verify your XML round-tripper doesn’t erase ignorable markup nodes.
|
|
287
|
-
|
|
288
|
-
**Files originating from Excel web**
|
|
289
|
-
- Scenario fixtures:
|
|
290
|
-
- `excel-web-export-basic`
|
|
291
|
-
- `excel-web-collab-comments` (often includes modern comment systems; likely preserve-only initially).
|
|
292
|
-
|
|
293
|
-
**Files exported from Google Sheets then reopened in Excel**
|
|
294
|
-
- Scenario fixtures:
|
|
295
|
-
- `gsheets-export-formulas`
|
|
296
|
-
- `gsheets-export-formatting`
|
|
297
|
-
- `gsheets-export-validation`
|
|
298
|
-
- These are grounded by the fact that Google Sheets supports downloading as `.xlsx`.
|
|
299
|
-
|
|
300
|
-
**Files exported from LibreOffice then reopened in Excel**
|
|
301
|
-
- Scenario fixtures:
|
|
302
|
-
- `libreoffice-export-basic`
|
|
303
|
-
- `libreoffice-export-chart`
|
|
304
|
-
- `libreoffice-export-validation`
|
|
305
|
-
- Treat as hostile: LibreOffice explicitly warns about conversion differences and unsupported features for complex documents.
|
|
306
|
-
|
|
307
|
-
**Malformed packages**
|
|
308
|
-
- Gate fixtures (block/fail by design):
|
|
309
|
-
- `missing-content-types`: no `[Content_Types].xml` → `block/malformed-opc`.
|
|
310
|
-
- `missing-root-rels`: no `/_rels/.rels` → `block/malformed-opc`.
|
|
311
|
-
- `dangling-relationship-target`: relationship to missing part.
|
|
312
|
-
- `bad-rels-naming`: incorrect relationship part placement/name.
|
|
313
|
-
- Policy: malformed fixtures must clearly assert expected behavior (`block` vs `fail`) and required diagnostic codes.
|
|
314
|
-
|
|
315
|
-
**Very large workbooks**
|
|
316
|
-
- Scenario + performance suite (not always release-gate):
|
|
317
|
-
- `wide-sheet-16k`: near 16,384 columns but modest rows.
|
|
318
|
-
- `tall-sheet-1m-lite`: large rows but sparse data to test streaming import.
|
|
319
|
-
- `dense-sharedstrings`: many repeated strings to stress shared string table behavior.
|
|
320
|
-
- Release-gate should include at least one “medium large” workbook that runs quickly in CI but still triggers your virtualized grid and serialization paths.
|
|
321
|
-
|
|
322
|
-
### Release-gate fixture policy
|
|
323
|
-
|
|
324
|
-
A fixture is **release-gate** if any of the following are true:
|
|
325
|
-
|
|
326
|
-
- It covers a feature marked `supported` in product docs.
|
|
327
|
-
- It covers a preservation contract (unknown parts, ignorable markup) that, if violated, would cause silent loss or Excel repair risk.
|
|
328
|
-
- It is a regression reproducer for a previously shipped bug.
|
|
329
|
-
|
|
330
|
-
Release-gate fixtures must be:
|
|
331
|
-
- Under a size cap (e.g., ≤2–5 MB uncompressed total parts unless justified).
|
|
332
|
-
- Deterministic: generated or accompanied by precise creation steps and “expected audit” files.
|
|
333
|
-
- Version-pinned: `origin.producerVersion` recorded and never “floating.”
|
|
334
|
-
|
|
335
|
-
### Representative scenario policy
|
|
336
|
-
|
|
337
|
-
Scenario fixtures can be larger/noisier and should represent:
|
|
338
|
-
- Real business sheets (financial models, reports, dashboards).
|
|
339
|
-
- Cross-origin files (Excel web, Google Sheets export, LibreOffice export).
|
|
340
|
-
- “Kitchen sink” workbooks with many features combined.
|
|
341
|
-
|
|
342
|
-
Scenarios are not automatically release blockers unless promoted to gate via regression policy.
|
|
343
|
-
|
|
344
|
-
### Regression fixture policy
|
|
345
|
-
|
|
346
|
-
When a bug is found in production or during certification:
|
|
347
|
-
|
|
348
|
-
- Create the **smallest possible reproducer** fixture (prefer generated or simplified Excel-created).
|
|
349
|
-
- Add the fixture with:
|
|
350
|
-
- `meta.regression`: `{issueId, introducedInVersion?, fixedInVersion}`
|
|
351
|
-
- `expectedImport/Export` states for the failing and fixed behavior.
|
|
352
|
-
- Promote to `release-gate` if the bug affected:
|
|
353
|
-
- Supported features,
|
|
354
|
-
- Preservation contracts,
|
|
355
|
-
- Any “Excel repair prompt” incident.
|
|
356
|
-
|
|
357
|
-
### Source-baseline-neutral cases
|
|
358
|
-
|
|
359
|
-
To avoid “Excel as fixture generator” bias, include **generated** fixtures constructed to satisfy OPC and minimum SpreadsheetML structure requirements. This is justified by the published minimum workbook scenario and package structure requirements.
|
|
360
|
-
|
|
361
|
-
Required generated fixture types:
|
|
362
|
-
- Minimal workbook (1 sheet).
|
|
363
|
-
- Minimal workbook with sharedStrings and styles.
|
|
364
|
-
- Relationships edge cases (but still valid).
|
|
365
|
-
- Unknown-part injection (extra part + relationship) to test preservation.
|
|
366
|
-
|
|
367
|
-
Generated fixtures should be built by your own fixture generator (Node or small .NET tool) so your corpus can evolve without relying on proprietary UI actions.
|
|
368
|
-
|
|
369
|
-
### Automated validation program
|
|
370
|
-
|
|
371
|
-
Implement a single CLI runner that executes:
|
|
372
|
-
|
|
373
|
-
1) **Import**: parse OPC package, build internal “package manifest” (list parts, relationships, content types).
|
|
374
|
-
2) **Normalize**: canonicalize ZIP and XML for comparison where allowed.
|
|
375
|
-
3) **Scenario program** (optional per fixture): execute a bounded edit script (no direct mutation; this is your command/transaction system under test).
|
|
376
|
-
4) **Export**: write `.xlsx`.
|
|
377
|
-
5) **Validate**:
|
|
378
|
-
- OPC lint: graph integrity, naming conventions, required parts.
|
|
379
|
-
- SpreadsheetML structure checks: workbook/sheets/worksheet parts, required relationships.
|
|
380
|
-
- Preservation checks:
|
|
381
|
-
- Unknown parts: payload hash equality against `part-hashes.json`.
|
|
382
|
-
- Relationship triples preserved.
|
|
383
|
-
- Optional: Open XML SDK validator lane (matrix by Office version enum; include `Microsoft365` at minimum).
|
|
384
|
-
|
|
385
|
-
**Outputs**:
|
|
386
|
-
- `reports/<runId>/fixture-results.json` with per-fixture pass/fail, warnings, diffs, and hashes.
|
|
387
|
-
- `reports/<runId>/exported/<fixtureId>.xlsx` for manual Excel certification.
|
|
388
|
-
|
|
389
|
-
### Manual Excel certification program
|
|
390
|
-
|
|
391
|
-
A release candidate cannot ship until the following is complete:
|
|
392
|
-
|
|
393
|
-
**Host matrix (minimum bar)**
|
|
394
|
-
- `excel-desktop-win-m365`
|
|
395
|
-
- `excel-desktop-mac-m365`
|
|
396
|
-
- `excel-web`
|
|
397
|
-
|
|
398
|
-
Rationale: Microsoft’s published Open XML format guidance targets Microsoft 365 and recent Excel releases, and Excel web is explicitly a core product surface.
|
|
399
|
-
|
|
400
|
-
**Manual procedure per release-gate fixture**
|
|
401
|
-
- Open exported file.
|
|
402
|
-
- Confirm:
|
|
403
|
-
- No “Repair” prompt (and no repair log generated).
|
|
404
|
-
- Worksheet count and names match expected.
|
|
405
|
-
- Key audit cells match expected values and formats (from `audit.xlsx.json`).
|
|
406
|
-
- For preserve-only features: confirm feature still exists when viewed in Excel (e.g., pivot table present; chart renders; threaded comments visible).
|
|
407
|
-
- Save-as (same format `.xlsx`) and re-open:
|
|
408
|
-
- Confirm no repair prompt.
|
|
409
|
-
- Compare the re-saved file to expected “Excel-normalized” tolerances (you will need separate expectations because Excel can reserialize). This prevents “passes on open but breaks on save,” which is a common hidden failure mode.
|
|
410
|
-
|
|
411
|
-
**Certification artifacts**
|
|
412
|
-
- Store results in `reports/cert/<releaseVersion>/host/<hostId>/…`
|
|
413
|
-
- Include screenshots or logs of any failures.
|
|
414
|
-
- Promote any discovered failure into a regression fixture.
|
|
415
|
-
|
|
416
|
-
## Sources
|
|
417
|
-
|
|
418
|
-
ECMA-376 standard landing page (parts and editions; downloads).
|
|
419
|
-
|
|
420
|
-
Open Packaging Conventions overview and requirements (content types stream, relationships-based discovery, relationship parts).
|
|
421
|
-
|
|
422
|
-
SpreadsheetML structure and minimum workbook scenario; key parts (workbook, worksheets, shared strings, calc chain, pivot parts, conditional formatting, formulas).
|
|
423
|
-
|
|
424
|
-
Microsoft Open XML SDK documentation for spreadsheet creation and part model (SpreadsheetDocument, WorkbookPart, WorksheetPart).
|
|
425
|
-
|
|
426
|
-
OpenXmlValidator API surface and version targeting; Open XML file format version enum (Office2007…Microsoft365).
|
|
427
|
-
|
|
428
|
-
Evidence and risk that validator success ≠ Excel success (Excel repair despite validation).
|
|
429
|
-
|
|
430
|
-
Microsoft Excel `.xlsx` extensions and compatibility mechanisms (`extLst`, `mc:Ignorable` usage requirements) and explicit part definitions (threaded comments part and requirements; slicer cache part requirements; legacy comment placeholder behavior).
|
|
431
|
-
|
|
432
|
-
Microsoft Support: Open XML formats applicability across recent Excel products; Excel workbook limits (rows/cols, cell character limits, unique formats).
|
|
433
|
-
|
|
434
|
-
Google Sheets export capability to `.xlsx` (official Google Docs Editors Help). and Microsoft Support guidance referencing Google Sheets “Download → Microsoft Excel (.xlsx)”.
|
|
435
|
-
|
|
436
|
-
LibreOffice ability to load/save `.xlsx` and warning about conversion limitations (official LibreOffice help + documentation).
|