@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,520 +0,0 @@
|
|
|
1
|
-
# SpreadsheetEditor UX Guide
|
|
2
|
-
|
|
3
|
-
## Interpretation of the problem
|
|
4
|
-
|
|
5
|
-
You want an implementation-ready, repo-ready UX guide for a React-based spreadsheet editor that round-trips modern Excel workbooks reliably: import `.xlsx` (as an OOXML/Open Packaging Conventions package), edit against a runtime-owned canonical workbook state, export back to a package that reopens in recent Excel environments without repair prompts or silent loss of content that Excel considers supported.
|
|
6
|
-
|
|
7
|
-
This guide has to be honest about v1 scope boundaries. Anything that cannot be safely supported end-to-end (import → runtime edit → export → reopen) must be explicitly classified and surfaced to the user as preserve-only or unsupported-fatal, with an explicit response model (preserve, lock, warn, block, fail) and zero silent dropping. Markup/parts you don’t understand still must be preserved as package artifacts, and the UI must remain a projection of runtime state rather than a React-owned workbook.
|
|
8
|
-
|
|
9
|
-
The UX must treat spreadsheets as spreadsheets (grid-first, selection semantics, formula inspection vs edit friction, comments/notes navigation, sheet tabs), not as “rich text with cells.” It must also acknowledge Excel’s real-world constraints (limits, naming rules) and the fact that Excel behavior can diverge from the base standard or rely on extensions, so you need to distinguish normative specs from observed Excel behavior and gate export trust accordingly.
|
|
10
|
-
|
|
11
|
-
## Research plan
|
|
12
|
-
|
|
13
|
-
I approached this by splitting “correctness” into three layers and using primary/official references wherever possible.
|
|
14
|
-
|
|
15
|
-
First, establish the normative substrate: `.xlsx` as an Open Packaging Conventions (OPC) package and the SpreadsheetML part graph model (parts, content types, relationships).
|
|
16
|
-
|
|
17
|
-
Second, map “Excel reality” on top: Microsoft’s published extensions and implementation notes (what Excel adds/extends and where observed behavior varies from the underlying spec), with special attention to areas that commonly trigger Excel repair flows (calc chain/calculation properties, worksheet properties, drawings, etc.).
|
|
18
|
-
|
|
19
|
-
Third, convert those constraints into UX posture: a grid-centric interaction model, explicit health/trust surfaces, keyboard/accessibility posture aligned with ARIA grid guidance, and a demo/harness model that exercises round-trip gates through realistic fixtures.
|
|
20
|
-
|
|
21
|
-
## Findings
|
|
22
|
-
|
|
23
|
-
**Normative substrate: `.xlsx` is an OPC package, not “some XML files.”** OPC defines a package as a container of “parts” connected by relationships, with content types declared and enforced; this is the base model used by Office Open XML file formats.
|
|
24
|
-
|
|
25
|
-
**SpreadsheetML structure is relationship-driven, and the minimum workbook is still a graph.** A SpreadsheetML document includes a `workbook.xml` that references worksheets via relationship IDs, with each worksheet stored in its own part; and real workbooks commonly include other parts (tables, chartsheets, pivot table definitions, etc.).
|
|
26
|
-
|
|
27
|
-
**Compatibility requires respect for markup compatibility and extensibility.** OOXML’s markup compatibility mechanisms exist specifically so producers can include newer/unknown vocabularies while allowing consumers with different feature sets to interoperate (e.g., ignorable namespaces, alternate content). This is the formal basis for a “preserve unknown markup” stance rather than “parse what we know and drop the rest.”
|
|
28
|
-
|
|
29
|
-
**Excel behavior is not just the ISO/ECMA baseline; it also relies on extensions and implementation-defined details.** Microsoft publishes (a) extension specifications for `.xlsx` and (b) implementation notes describing how Office implements and varies from ISO/IEC 29500, explicitly calling out that Office can extend or deviate and that those notes are updated.
|
|
30
|
-
|
|
31
|
-
**Comments vs notes is a real UX fault line in modern Excel environments.** Excel distinguishes threaded “Comments” (discussion model) from “Notes” (legacy comment model), which affects how you should present annotation features and what you can honestly claim to support in v1.
|
|
32
|
-
|
|
33
|
-
**Excel has explicit repair/recovery flows that you can treat as the user-visible failure mode for bad exports.** Microsoft documents “Open and Repair” and recovery strategies for corrupted workbooks, which is effectively your compatibility bar: if your export triggers repair prompts, you failed the “host is the standard” requirement.
|
|
34
|
-
|
|
35
|
-
**Hard constraints affect UX and validation (limits and naming rules).** Excel’s published workbook/worksheet limits are not theoretical; they bound what “safe mode” and “large workbook posture” should mean in practice.
|
|
36
|
-
Worksheet names also have explicit constraints (non-empty, length, forbidden characters), and violating these is a common generator of “unreadable content / repair” scenarios in real ecosystems.
|
|
37
|
-
|
|
38
|
-
**Calculation state is a common source of round-trip landmines.** The SpreadsheetML model includes calculation properties (e.g., `calcPr`) and an optional calculation chain part (`calcChain.xml`) that records last calculation order; libraries and Excel can react badly to inconsistencies (missing referenced parts, stale chain, etc.).
|
|
39
|
-
Additionally, Microsoft’s implementation notes explicitly document places where Excel uses defaults or behaviors not fully pinned down by the base standard (example: defaults in calculation properties).
|
|
40
|
-
|
|
41
|
-
**Keyboard and accessibility posture for a web spreadsheet is not optional; ARIA grid guidance is the baseline.** W3C’s ARIA Authoring Practices provide explicit keyboard interaction expectations for grid patterns; if you want a credible “Excel-like” editor on the web, this guidance should shape focus management and navigation semantics.
|
|
42
|
-
|
|
43
|
-
## Recommended design / decisions
|
|
44
|
-
|
|
45
|
-
The UX guide below is built around a few non-negotiable decisions that follow directly from the standards/behavior findings and your framing constraints.
|
|
46
|
-
|
|
47
|
-
The editor must expose a calm “trust and health” contract, because Excel’s native failure mode for structural issues is “repair/remove content,” which users correctly interpret as “data loss risk.” That means: always show whether the session can export safely, and why; never bury preserve-only/blocked/fatal states inside a console log or a tiny badge.
|
|
48
|
-
|
|
49
|
-
The product should treat “package preservation” as a first-class UX concept: preserved-but-not-editable objects must be visible as objects with identity (not as scary red errors), and edits that would invalidate preserved structures must either be blocked or downgraded to preserve-only with an explicit warning, never silently applied. This is aligned with the OOXML/OPC reality that a workbook is a relationship graph and with markup compatibility’s explicit interoperability intent.
|
|
50
|
-
|
|
51
|
-
Grid-first UX should be enforced structurally: the grid is the primary visual focus; toolbars and review chrome are secondary and must not turn into a ribbon clone. The formula bar needs to exist (even in v1) because spreadsheets have a persistent tension between “inspect the formula/value” and “edit the formula/value,” and relying solely on inline edit tends to collapse those modes into confusion. This should be framed as explicit “inspect vs edit” modes rather than pretending they’re the same thing.
|
|
52
|
-
|
|
53
|
-
Accessibility and keyboard support need to be designed, not patched. A spreadsheet grid is fundamentally a grid widget with heavy keyboard navigation; ARIA grid practices should drive the core navigation and focus model from day one, even if some Excel shortcuts are out of scope initially.
|
|
54
|
-
|
|
55
|
-
Finally, v1 must be honest about calculations and complex features. If you are not implementing a full Excel calc engine, you should not claim “formula correctness.” The UX should clearly communicate what is being shown (stored values vs computed values) and how export will behave (e.g., “recalculate on open” posture) while avoiding any approach that produces workbooks Excel will “repair.”
|
|
56
|
-
|
|
57
|
-
## Risks and open questions
|
|
58
|
-
|
|
59
|
-
The biggest product risk is **accidentally shipping “looks fine in our editor, repairs in Excel.”** Excel’s repair tooling exists specifically because small structural mistakes in parts/relationships/calculation state/drawings can make a workbook partially unreadable, leading to removed records or user prompts. Your UX must assume that any such event destroys trust, regardless of how good the web UI felt.
|
|
60
|
-
|
|
61
|
-
The second major risk is **formula and value truthfulness.** If you edit formula strings but do not compute results, you will be showing either stale cached values or blank results. You can mitigate with a recalc-on-open posture, but you must ensure calculation properties are coherent and you don’t create/retain calc chains in an inconsistent way.
|
|
62
|
-
|
|
63
|
-
A third risk is **comment model mismatch (Notes vs threaded Comments).** If you partially support one model and accidentally mutate the other’s underlying structure, you can break how Excel interprets the annotations. This is a classic “preserve-only unless fully supported” boundary.
|
|
64
|
-
|
|
65
|
-
A fourth risk is **Strict vs Transitional and “real world” OOXML variance.** Tooling (including SDKs and producers) can map or normalize namespaces and structures; the ecosystem reality is messy. Your preservation layer needs to be robust to variance and your UX needs to clearly say what you validated vs what you merely preserved.
|
|
66
|
-
|
|
67
|
-
Open questions you should explicitly decide before “v1 stable UX”:
|
|
68
|
-
- Whether v1 supports any editable form of filters/tables/frozen panes versus preserve-only indicators (these features are common in real workbooks, and the UX must not surprise users either way).
|
|
69
|
-
- Whether v1 supports threaded Comments, Notes, both as preserve-only, or one editable and one preserve-only; and what “review surfaces” mean in that choice.
|
|
70
|
-
- What your official “large workbook safe mode” triggers are, and which interactions are disabled or degraded in that mode (because Excel’s limits and typical workbook scale vary wildly, and web performance failure modes are brutal).
|
|
71
|
-
|
|
72
|
-
## Concrete deliverable in the requested format
|
|
73
|
-
|
|
74
|
-
```md
|
|
75
|
-
# SpreadsheetEditor UX Guide
|
|
76
|
-
|
|
77
|
-
Status: Draft (non-production posture)
|
|
78
|
-
Last updated: 2026-03-28
|
|
79
|
-
Audience: Product + Engineering (editor runtime, UI, QA, certification review)
|
|
80
|
-
|
|
81
|
-
This document defines the canonical UX for SpreadsheetEditor: an embeddable React component that edits Excel-compatible workbooks through a runtime-owned canonical state. The UI is a projection of runtime state. All changes happen via commands → transactions → commit.
|
|
82
|
-
|
|
83
|
-
This is not a promise of “full Excel in the browser.” It is a promise of honesty, preservation, and export trust.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Purpose
|
|
88
|
-
|
|
89
|
-
SpreadsheetEditor exists to:
|
|
90
|
-
- Allow safe, high-confidence edits to XLSX workbooks in a web host without breaking Excel reopen behavior.
|
|
91
|
-
- Provide a grid-first editing experience that respects spreadsheet interaction semantics (selection, ranges, formulas, sheets).
|
|
92
|
-
- Preserve unsupported content as package artifacts with explicit user-facing health/trust signaling.
|
|
93
|
-
- Offer one embeddable React component with a typed public API, where React does not own workbook truth.
|
|
94
|
-
|
|
95
|
-
Non-goals:
|
|
96
|
-
- Building a ribbon clone.
|
|
97
|
-
- Implementing the full Excel calculation engine in v1.
|
|
98
|
-
- Claiming fidelity for features that cannot round-trip safely.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Product posture and v1 support boundaries
|
|
103
|
-
|
|
104
|
-
### Support levels (must be explicit in UI and API)
|
|
105
|
-
- Supported: Import → edit → export → reopen is covered by automated + manual gates.
|
|
106
|
-
- Preserve-only: Imported and preserved byte-for-byte (or semantically preserved) but not edited; shown in UX as “present but not editable here.”
|
|
107
|
-
- Locked: Data is editable only where allowed (e.g., protection, policy). UX blocks prohibited edits with explanation.
|
|
108
|
-
- Blocked: Operation is not allowed because it risks breaking the file or violating policy; user can still inspect and export unchanged.
|
|
109
|
-
- Fatal: File cannot be safely loaded into runtime (or cannot be exported) without risking corruption; editor refuses or enters read-only “recovery view.”
|
|
110
|
-
|
|
111
|
-
### Export trust posture
|
|
112
|
-
Export is never “just a download button.”
|
|
113
|
-
Export is a trust contract:
|
|
114
|
-
- If export is allowed, the editor states what it guarantees (and what it does not).
|
|
115
|
-
- If export is blocked, the editor states exactly why and what the user can do (if anything).
|
|
116
|
-
|
|
117
|
-
### v1 honesty defaults
|
|
118
|
-
Unless explicitly listed as Supported, treat workbook features as Preserve-only.
|
|
119
|
-
If a feature is common and risky (charts/pivots/drawings/macros/protection variants), default to Preserve-only or Locked until proven safe.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## UX layers and internal interfaces
|
|
124
|
-
|
|
125
|
-
### Host framing layer (owned by the embedding app)
|
|
126
|
-
Responsibilities:
|
|
127
|
-
- Routing, navigation, and file/session selection.
|
|
128
|
-
- Auth, tenancy, and policy (what is allowed to be edited/exported).
|
|
129
|
-
- Storage/IO: loading bytes, saving bytes, versioning, collaboration orchestration (if any).
|
|
130
|
-
- Displaying global banners/modals that are not editor-specific (e.g., org-wide incident banners).
|
|
131
|
-
|
|
132
|
-
Host must treat SpreadsheetEditor as a pure component:
|
|
133
|
-
- The host provides a file (bytes/stream) and receives events, commands, and exported bytes.
|
|
134
|
-
- The host does not mutate the workbook directly.
|
|
135
|
-
|
|
136
|
-
### Editor layer (SpreadsheetEditor component)
|
|
137
|
-
Responsibilities:
|
|
138
|
-
- Parse/load into runtime canonical workbook state (or refuse with Fatal).
|
|
139
|
-
- Maintain canonical state (runtime-owned), including preservation registry for unknown parts.
|
|
140
|
-
- Project state into UI view models.
|
|
141
|
-
- Offer command API and transaction model.
|
|
142
|
-
- Provide health/trust surfaces and export gating.
|
|
143
|
-
|
|
144
|
-
### Routes (for demo harness / workspace shell)
|
|
145
|
-
Suggested harness routes:
|
|
146
|
-
- /spreadsheet (library / session list)
|
|
147
|
-
- /spreadsheet/:fixtureId (opens a known fixture workbook)
|
|
148
|
-
- /spreadsheet/:docId (opens a host-provided document id)
|
|
149
|
-
- /spreadsheet/:docId/compare (optional: compare last export vs original)
|
|
150
|
-
|
|
151
|
-
Routes are harness-only. The shipped product is a single embeddable component.
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Screen anatomy
|
|
156
|
-
|
|
157
|
-
The editor UI is intentionally simple and grid-centric.
|
|
158
|
-
|
|
159
|
-
Recommended layout:
|
|
160
|
-
|
|
161
|
-
[Top bar]
|
|
162
|
-
- File name + save/export status
|
|
163
|
-
- Health/Trust chip (calm, always visible)
|
|
164
|
-
- Minimal primary actions (Undo/Redo, Export)
|
|
165
|
-
|
|
166
|
-
[Formula zone]
|
|
167
|
-
- Name box (active cell reference, e.g., A1) + optional range size indicator
|
|
168
|
-
- Formula bar (view/edit formula/value)
|
|
169
|
-
- Function hint / validation messages (inline, unobtrusive)
|
|
170
|
-
|
|
171
|
-
[Main zone]
|
|
172
|
-
- Grid (primary focus)
|
|
173
|
-
- Row headers
|
|
174
|
-
- Column headers
|
|
175
|
-
- Cell canvas (virtualized)
|
|
176
|
-
- Sheet tabs (bottom)
|
|
177
|
-
- Optional right side panel (secondary)
|
|
178
|
-
- Comments/Notes
|
|
179
|
-
- Health report
|
|
180
|
-
- Preserve-only inventory
|
|
181
|
-
|
|
182
|
-
[Bottom status bar]
|
|
183
|
-
- Selection summary (count/sum/avg if implemented)
|
|
184
|
-
- Mode indicators (Edit mode, Safe mode, Read-only, Filter present, etc.)
|
|
185
|
-
|
|
186
|
-
Rules:
|
|
187
|
-
- Grid is always the visual priority.
|
|
188
|
-
- Side panels never steal the center; they can collapse.
|
|
189
|
-
- Warnings are calm and actionable, not alarming unless truly fatal.
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## Session inventory
|
|
194
|
-
|
|
195
|
-
A “session” is the unit the host and editor talk about. The session model must be visible in the UI (status, health) and explicit in the API.
|
|
196
|
-
|
|
197
|
-
Session includes:
|
|
198
|
-
- Source: file id, filename, extension, last loaded timestamp
|
|
199
|
-
- Workbook identity: package fingerprint (hash), internal workbook id (runtime)
|
|
200
|
-
- Editability: read/write, policy locks, protection locks
|
|
201
|
-
- Health state: aggregated level + list of issues
|
|
202
|
-
- Preserve-only inventory: counts by feature type (e.g., charts, pivots, drawings)
|
|
203
|
-
- Performance mode: normal vs Safe mode, and why
|
|
204
|
-
- Dirty state: pending changes vs committed changes, last commit id
|
|
205
|
-
- Export plan: whether export is allowed; if allowed, export warnings and known changes
|
|
206
|
-
- Diagnostics bundle id (optional): for support and reproducibility
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## Interaction rules
|
|
211
|
-
|
|
212
|
-
### Focus and modality
|
|
213
|
-
The editor has two primary modes:
|
|
214
|
-
- Navigate/select mode: arrow keys move the active cell; shift extends selection; grid is in control.
|
|
215
|
-
- Edit mode: typing edits the cell content (inline) or formula bar content (explicit), with clear entry/exit.
|
|
216
|
-
|
|
217
|
-
Rules:
|
|
218
|
-
- There is always exactly one active cell.
|
|
219
|
-
- There is at most one primary selection (a range).
|
|
220
|
-
- A selection can be:
|
|
221
|
-
- Single cell
|
|
222
|
-
- Range
|
|
223
|
-
- Entire row(s)
|
|
224
|
-
- Entire column(s)
|
|
225
|
-
- Entire sheet (optional; usually via corner cell)
|
|
226
|
-
|
|
227
|
-
### Selection behavior
|
|
228
|
-
- Click cell: active cell set, selection = that cell.
|
|
229
|
-
- Drag: selection expands to rectangle range.
|
|
230
|
-
- Shift+click: expands selection to rectangle between active cell anchor and target.
|
|
231
|
-
- Ctrl/Cmd+click: v1 default is “replace selection” (multi-range selection is optional and must be explicit if supported).
|
|
232
|
-
- Header click:
|
|
233
|
-
- Row header selects row.
|
|
234
|
-
- Column header selects column.
|
|
235
|
-
- Sheet tab click selects sheet; preserves last active cell per sheet.
|
|
236
|
-
|
|
237
|
-
Selection must never mutate the workbook. Selection only updates view state.
|
|
238
|
-
|
|
239
|
-
### Copy/paste behavior (v1 safe default)
|
|
240
|
-
- Copy/paste inside the editor is supported for values + basic formulas + basic formats (only if formats are Supported).
|
|
241
|
-
- Pasting external content (from system clipboard) is “best effort” and must never:
|
|
242
|
-
- silently drop data
|
|
243
|
-
- create invalid workbook state
|
|
244
|
-
If paste cannot be represented safely, block with explanation and offer to paste as plain text.
|
|
245
|
-
|
|
246
|
-
### Undo/redo
|
|
247
|
-
Undo/redo is command-driven:
|
|
248
|
-
- Every edit command yields an undoable transaction.
|
|
249
|
-
- UI must show that undo/redo affects workbook state, not just the UI.
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## Toolbar principles
|
|
254
|
-
|
|
255
|
-
Design principles:
|
|
256
|
-
- Minimal, task-oriented, not a ribbon.
|
|
257
|
-
- Default to “common spreadsheet edits,” not formatting power-user operations.
|
|
258
|
-
- The toolbar is context-aware but not context-exploding.
|
|
259
|
-
|
|
260
|
-
Recommended v1 toolbar groups:
|
|
261
|
-
- Edit: Undo, Redo
|
|
262
|
-
- Insert: Row, Column (only if safe)
|
|
263
|
-
- Format (optional v1): Bold, Italic, Number format (very small subset)
|
|
264
|
-
- Data (optional v1): Sort (simple), Filter indicator (edit may be out of scope)
|
|
265
|
-
- Review: Comments/Notes panel toggle, Health panel toggle
|
|
266
|
-
- Export: Export button with trust status (and dropdown for “export with warnings” only if needed)
|
|
267
|
-
|
|
268
|
-
Rules:
|
|
269
|
-
- Any action that could break preserve-only content must either be blocked or must upgrade the health state with explicit warning before commit.
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Grid and formula bar behavior
|
|
274
|
-
|
|
275
|
-
### Grid is primary editing surface
|
|
276
|
-
- Single-click selects.
|
|
277
|
-
- Double-click enters inline edit.
|
|
278
|
-
- Typing when in navigate mode starts inline edit (unless policy blocks).
|
|
279
|
-
|
|
280
|
-
Inline editor:
|
|
281
|
-
- Shows raw formula text if the cell has a formula.
|
|
282
|
-
- Shows displayed value if the cell is a value cell.
|
|
283
|
-
- Provides lightweight validation feedback (e.g., “Invalid reference” as warn, not as hard fail, unless it breaks export).
|
|
284
|
-
|
|
285
|
-
### Formula bar is primary inspection + precise edit surface
|
|
286
|
-
Formula bar supports:
|
|
287
|
-
- Always-visible display of the active cell’s raw content:
|
|
288
|
-
- If formula: show formula text.
|
|
289
|
-
- If value: show value representation (string/number/date formatting depends on Supported formatting).
|
|
290
|
-
- Explicit edit mode:
|
|
291
|
-
- Enter starts editing the formula bar content.
|
|
292
|
-
- Escape cancels edits.
|
|
293
|
-
- Commit occurs on Enter, with clear visual confirmation.
|
|
294
|
-
|
|
295
|
-
Tradeoff posture:
|
|
296
|
-
- Inline edit is fast.
|
|
297
|
-
- Formula bar edit is precise and better for long formulas.
|
|
298
|
-
UX must make it clear which one you’re doing.
|
|
299
|
-
|
|
300
|
-
### Inspect vs edit “conflict” rule
|
|
301
|
-
When the user is inspecting a formula (e.g., a read-only preview state), do not auto-enter edit mode. Require explicit action (double-click or Enter) to edit. This prevents accidental edits during audit/review use.
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## Comments, review, and health surfaces
|
|
306
|
-
|
|
307
|
-
### Comments/Notes panel
|
|
308
|
-
A single panel that can show:
|
|
309
|
-
- Threaded Comments (if Supported or Preserve-only view)
|
|
310
|
-
- Notes (legacy) (if Supported or Preserve-only view)
|
|
311
|
-
v1 may support:
|
|
312
|
-
- Read-only list + navigation (scroll to anchor cell)
|
|
313
|
-
- Add/edit only for the comment type that round-trips safely
|
|
314
|
-
|
|
315
|
-
Navigation:
|
|
316
|
-
- Next/previous comment traversal jumps active cell.
|
|
317
|
-
- Panel clearly labels whether comments are editable or preserve-only.
|
|
318
|
-
|
|
319
|
-
### Health / Trust panel (always available)
|
|
320
|
-
The Health panel is the user-facing representation of your preservation + export contract.
|
|
321
|
-
|
|
322
|
-
It must list:
|
|
323
|
-
- Issues grouped by severity: Preserve-only, Locked, Warn, Blocked, Fatal.
|
|
324
|
-
- For each issue:
|
|
325
|
-
- What it is (plain language)
|
|
326
|
-
- Where it is (sheet/cell/object)
|
|
327
|
-
- What the editor will do (preserve/lock/warn/block/fail)
|
|
328
|
-
- Whether export is allowed and what will happen in Excel
|
|
329
|
-
|
|
330
|
-
Calm tone rules:
|
|
331
|
-
- Preserve-only is not an error. It’s “present, unchanged.”
|
|
332
|
-
- Warn is “may change behavior,” not “you broke it.”
|
|
333
|
-
- Block/Fatal are rare and must be specific.
|
|
334
|
-
|
|
335
|
-
### Preserve-only inventory surface
|
|
336
|
-
Non-cell features (charts, pivots, images, drawings, external links, advanced tables, advanced protection, etc.) should appear as inventory items with:
|
|
337
|
-
- Type
|
|
338
|
-
- Count
|
|
339
|
-
- Location (sheet)
|
|
340
|
-
- Behavior: Preserved unchanged; not editable here
|
|
341
|
-
- Risk: whether certain edits could invalidate them (if known)
|
|
342
|
-
|
|
343
|
-
Do not render fake versions of these objects in v1. Use placeholders and honesty.
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
## Warning, preserve-only, blocked, and fatal states
|
|
348
|
-
|
|
349
|
-
### State definitions (UX contract)
|
|
350
|
-
- Preserve-only:
|
|
351
|
-
- UI: neutral info badge + panel entry.
|
|
352
|
-
- Behavior: preserved through export unchanged as long as edits do not require rewriting those parts.
|
|
353
|
-
- Locked:
|
|
354
|
-
- UI: lock icon in relevant surfaces; editing actions disabled with explanation.
|
|
355
|
-
- Behavior: protect workbook integrity and policy compliance.
|
|
356
|
-
- Warn:
|
|
357
|
-
- UI: yellow/calming indicator + details on demand.
|
|
358
|
-
- Behavior: allow edits but surface tradeoffs; export allowed with warning note.
|
|
359
|
-
- Blocked:
|
|
360
|
-
- UI: action disabled; explicit reason and alternative (if any).
|
|
361
|
-
- Behavior: prevent unsafe edit/export transitions.
|
|
362
|
-
- Fatal:
|
|
363
|
-
- UI: refuse to enter edit session OR open in “recovery view” (read-only) with diagnostics.
|
|
364
|
-
- Behavior: no export unless “export unchanged” is proven safe.
|
|
365
|
-
|
|
366
|
-
### Export gating rules (v1)
|
|
367
|
-
- Allowed:
|
|
368
|
-
- Supported + Preserve-only issues only.
|
|
369
|
-
- Allowed with warnings:
|
|
370
|
-
- Warn issues present but not known to trigger repair; still requires explicit acknowledgment in UI.
|
|
371
|
-
- Blocked:
|
|
372
|
-
- Any blocked or fatal export issues.
|
|
373
|
-
- Fail:
|
|
374
|
-
- Export attempt produces invalid package; must be treated as a bug with a diagnostics bundle.
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
## Keyboard and accessibility posture
|
|
379
|
-
|
|
380
|
-
Baseline posture:
|
|
381
|
-
- Keyboard-first navigation must be usable.
|
|
382
|
-
- Screen reader semantics must be coherent.
|
|
383
|
-
|
|
384
|
-
Minimum keyboard set:
|
|
385
|
-
- Arrow keys: move active cell
|
|
386
|
-
- Shift+arrows: expand selection
|
|
387
|
-
- Enter: move down (navigate mode) / commit (edit mode)
|
|
388
|
-
- Tab: move right (navigate mode), with sheet boundary behavior defined
|
|
389
|
-
- F2 (optional) or Enter: enter edit mode
|
|
390
|
-
- Escape: exit edit mode / dismiss panels
|
|
391
|
-
- Ctrl/Cmd+C/V/X: copy/paste/cut (subject to safety rules)
|
|
392
|
-
- Ctrl/Cmd+Z/Y: undo/redo
|
|
393
|
-
|
|
394
|
-
Accessibility requirements:
|
|
395
|
-
- Grid uses an ARIA grid strategy with stable focus rules (“roving” focus, not thousands of tabbable cells).
|
|
396
|
-
- Active cell is always announced.
|
|
397
|
-
- Selection changes are announced in a throttled, non-spammy way.
|
|
398
|
-
- High contrast + zoom must not break selection affordances.
|
|
399
|
-
|
|
400
|
-
Out of scope in v1 unless proven:
|
|
401
|
-
- Full Excel shortcut compatibility
|
|
402
|
-
- Complex screen-reader formula auditing workflows
|
|
403
|
-
|
|
404
|
-
---
|
|
405
|
-
|
|
406
|
-
## Large workbook safe mode
|
|
407
|
-
|
|
408
|
-
Safe mode exists to prevent browser death spirals and to preserve trust.
|
|
409
|
-
|
|
410
|
-
Trigger examples (implementation-defined):
|
|
411
|
-
- Extremely large sheet dimensions or used-range sizes
|
|
412
|
-
- Too many styles/conditional formats
|
|
413
|
-
- Huge shared string tables
|
|
414
|
-
- Complex objects inventory beyond rendering budget
|
|
415
|
-
|
|
416
|
-
Safe mode UX:
|
|
417
|
-
- Persistent indicator: “Safe mode (performance)”
|
|
418
|
-
- Clear list of disabled/limited interactions:
|
|
419
|
-
- e.g., limited formatting, limited multi-sheet operations, disabled external paste, reduced reflow
|
|
420
|
-
- No surprise: The user should know what’s limited before they run into it.
|
|
421
|
-
|
|
422
|
-
Safe mode is not “read-only.” It is “reduced capability with safe export.”
|
|
423
|
-
|
|
424
|
-
---
|
|
425
|
-
|
|
426
|
-
## Demo / harness framing
|
|
427
|
-
|
|
428
|
-
The demo harness is part of the product’s credibility. It should behave like a workspace shell and expose health/trust clearly.
|
|
429
|
-
|
|
430
|
-
Harness requirements:
|
|
431
|
-
- Fixture library (bundled workbooks) that cover:
|
|
432
|
-
- clean/supported workbooks
|
|
433
|
-
- preserve-only heavy workbooks (charts/pivots/images)
|
|
434
|
-
- calculation-heavy workbooks (formulas)
|
|
435
|
-
- protection-locked workbooks
|
|
436
|
-
- large-workbook safe mode triggers
|
|
437
|
-
- Each fixture page shows:
|
|
438
|
-
- “What this proves” statement
|
|
439
|
-
- Expected health state
|
|
440
|
-
- Expected export result (reopen gates)
|
|
441
|
-
- Export from harness stores:
|
|
442
|
-
- original bytes
|
|
443
|
-
- exported bytes
|
|
444
|
-
- diff summary (parts changed)
|
|
445
|
-
- “opened in Excel” manual checklist results (tracked by QA)
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
|
-
## Mapping to the final component
|
|
450
|
-
|
|
451
|
-
SpreadsheetEditor (React component) mapping rules:
|
|
452
|
-
- The React component owns rendering + input dispatch.
|
|
453
|
-
- The runtime owns:
|
|
454
|
-
- canonical workbook state
|
|
455
|
-
- preservation registry
|
|
456
|
-
- transaction log
|
|
457
|
-
- validation and export pipeline
|
|
458
|
-
|
|
459
|
-
Public API principles:
|
|
460
|
-
- Typed commands, not ad-hoc callbacks.
|
|
461
|
-
- Events are observable, not mutation hooks.
|
|
462
|
-
- Host can:
|
|
463
|
-
- load bytes
|
|
464
|
-
- subscribe to session state + health
|
|
465
|
-
- issue commands (edit cell, insert row, etc.)
|
|
466
|
-
- request export
|
|
467
|
-
- receive structured results (success + warnings or blocked/fatal)
|
|
468
|
-
|
|
469
|
-
Required API surface (conceptual):
|
|
470
|
-
- load(inputBytes, options) -> session
|
|
471
|
-
- getStateSnapshot() -> { viewModel, health, inventory }
|
|
472
|
-
- dispatch(command) -> transactionResult
|
|
473
|
-
- export(options) -> { bytes | blocked | fatal, report }
|
|
474
|
-
- on(eventType, handler) / subscribe(selector)
|
|
475
|
-
|
|
476
|
-
---
|
|
477
|
-
|
|
478
|
-
## Review checklist (v1 readiness gates)
|
|
479
|
-
|
|
480
|
-
UX gates:
|
|
481
|
-
- Grid remains primary focus; toolbars/panels don’t overwhelm.
|
|
482
|
-
- Health/Trust is always visible and understandable.
|
|
483
|
-
- Preserve-only content is visible, calm, and non-panicking.
|
|
484
|
-
- Blocked/fatal states are explicit and actionable.
|
|
485
|
-
- Safe mode messaging is persistent and honest.
|
|
486
|
-
- Keyboard navigation is usable; focus never gets lost.
|
|
487
|
-
|
|
488
|
-
Architecture gates (UX-relevant):
|
|
489
|
-
- UI never mutates workbook directly; all changes are command→transaction→commit.
|
|
490
|
-
- Unsupported content is never silently dropped.
|
|
491
|
-
- Export is gated by health state, not by “it probably works.”
|
|
492
|
-
|
|
493
|
-
Compatibility gates:
|
|
494
|
-
- Exported files reopen in recent Excel environments without repair prompts for all Supported fixtures.
|
|
495
|
-
- Preserve-only fixtures reopen with preserved content present and unchanged (as defined by the fixture expectations).
|
|
496
|
-
- Any repair prompt in Supported fixtures is a release blocker.
|
|
497
|
-
|
|
498
|
-
Documentation gates:
|
|
499
|
-
- Each supported feature has:
|
|
500
|
-
- definition
|
|
501
|
-
- known failure modes
|
|
502
|
-
- preserve-only fallback rule
|
|
503
|
-
- Each preserve-only feature has:
|
|
504
|
-
- visible UX surfacing
|
|
505
|
-
- “what this means” explanation
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
## Sources
|
|
509
|
-
|
|
510
|
-
publishes ECMA-376 (Office Open XML file formats), describing OOXML vocabularies and packaging as a standard reference point for producers/consumers.
|
|
511
|
-
|
|
512
|
-
/ publish ISO/IEC 29500-2 (Open Packaging Conventions), defining the package/parts/relationships model that underlies `.xlsx` as an OPC container.
|
|
513
|
-
|
|
514
|
-
provides official Open Specifications for Excel’s `.xlsx` extensions and Office implementation notes, which are crucial for distinguishing spec-level correctness from “Excel correctness” (what Excel actually writes, reads, and varies).
|
|
515
|
-
|
|
516
|
-
Microsoft’s Open XML SDK documentation provides authoritative implementation-oriented descriptions of SpreadsheetML structure, worksheet relationships, markup compatibility concepts, and calculation chain concepts used by ecosystem tooling.
|
|
517
|
-
|
|
518
|
-
Microsoft Support documentation establishes real-world Excel constraints and failure modes that should directly shape validation, UX gating, and “export trust posture,” including workbook repair flows, worksheet naming rules, and workbook limits.
|
|
519
|
-
|
|
520
|
-
ARIA Authoring Practices (APG) provides the baseline keyboard interaction guidance for grid widgets, which should shape spreadsheet navigation/focus models in a web UI.
|