@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.
Files changed (560) hide show
  1. package/README.md +44 -104
  2. package/package.json +66 -15
  3. package/src/api/public-types.ts +1 -1
  4. package/src/compare/diff-engine.ts +530 -0
  5. package/src/compare/export-redlines.ts +162 -0
  6. package/src/compare/snapshot.ts +37 -0
  7. package/src/core/commands/index.ts +1 -1
  8. package/src/core/state/editor-state.ts +2 -2
  9. package/src/index.ts +45 -0
  10. package/src/legal/bookmarks.ts +196 -0
  11. package/src/legal/cross-references.ts +356 -0
  12. package/src/legal/defined-terms.ts +203 -0
  13. package/src/runtime/document-runtime.ts +3 -5
  14. package/src/runtime/table-commands.ts +4 -1
  15. package/src/runtime/table-schema.ts +17 -2
  16. package/src/runtime/virtualized-rendering.ts +258 -0
  17. package/src/ui/WordReviewEditor.tsx +256 -35
  18. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
  19. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
  20. package/.codex/config.toml +0 -5
  21. package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
  22. package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
  23. package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
  24. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
  25. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
  26. package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
  27. package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
  28. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
  29. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
  30. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
  31. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
  32. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
  33. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
  34. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
  35. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
  36. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
  37. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
  38. package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
  39. package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
  40. package/.cursor/mcp.json +0 -7
  41. package/.github/workflows/ci.yml +0 -35
  42. package/.mcp.json +0 -7
  43. package/.openclaw/workspace-state.json +0 -4
  44. package/.pnpmrc.json +0 -1
  45. package/.wave-launch.sh +0 -7
  46. package/.workspace-marker +0 -1
  47. package/AGENTS.md +0 -78
  48. package/CHANGELOG.md +0 -177
  49. package/DESIGN.md +0 -929
  50. package/HEARTBEAT.md +0 -7
  51. package/IDENTITY.md +0 -23
  52. package/SOUL.md +0 -36
  53. package/TOOLS.md +0 -40
  54. package/USER.md +0 -17
  55. package/docs/README.md +0 -107
  56. package/docs/agents/wave-cont-eval-role.md +0 -36
  57. package/docs/agents/wave-cont-qa-role.md +0 -52
  58. package/docs/agents/wave-deploy-verifier-role.md +0 -34
  59. package/docs/agents/wave-design-role.md +0 -47
  60. package/docs/agents/wave-documentation-role.md +0 -34
  61. package/docs/agents/wave-infra-role.md +0 -34
  62. package/docs/agents/wave-integration-role.md +0 -37
  63. package/docs/agents/wave-launcher-role.md +0 -41
  64. package/docs/agents/wave-orchestrator-role.md +0 -52
  65. package/docs/agents/wave-planner-role.md +0 -39
  66. package/docs/agents/wave-security-role.md +0 -40
  67. package/docs/architecture/docx/README.md +0 -10
  68. package/docs/architecture/future/README.md +0 -8
  69. package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
  70. package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
  71. package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
  72. package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
  73. package/docs/comment-redline-overview.md +0 -350
  74. package/docs/concepts/context7-vs-skills.md +0 -118
  75. package/docs/concepts/operating-modes.md +0 -91
  76. package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
  77. package/docs/concepts/what-is-a-wave.md +0 -217
  78. package/docs/context7/bundles.json +0 -222
  79. package/docs/context7/planner-agent/README.md +0 -28
  80. package/docs/context7/planner-agent/manifest.json +0 -83
  81. package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
  82. package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
  83. package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
  84. package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
  85. package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
  86. package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
  87. package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
  88. package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
  89. package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
  90. package/docs/evals/arm-templates/README.md +0 -13
  91. package/docs/evals/arm-templates/full-wave.json +0 -15
  92. package/docs/evals/arm-templates/single-agent.json +0 -15
  93. package/docs/evals/benchmark-catalog.json +0 -670
  94. package/docs/evals/cases/README.md +0 -47
  95. package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
  96. package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
  97. package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
  98. package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
  99. package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
  100. package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
  101. package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
  102. package/docs/evals/external-benchmarks.json +0 -85
  103. package/docs/evals/external-command-config.sample.json +0 -9
  104. package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
  105. package/docs/evals/pilots/README.md +0 -47
  106. package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
  107. package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
  108. package/docs/evals/wave-benchmark-program.md +0 -302
  109. package/docs/guides/planner.md +0 -220
  110. package/docs/guides/recommendations-0.8.9.md +0 -133
  111. package/docs/guides/signal-wrappers.md +0 -165
  112. package/docs/guides/terminal-surfaces.md +0 -96
  113. package/docs/image copy.png +0 -0
  114. package/docs/image.png +0 -0
  115. package/docs/images/image.png +0 -0
  116. package/docs/legal-feedback-architecture.md +0 -498
  117. package/docs/plans/component-cutover-matrix.json +0 -1072
  118. package/docs/plans/component-cutover-matrix.md +0 -307
  119. package/docs/plans/context7-wave-orchestrator.md +0 -155
  120. package/docs/plans/current-state.md +0 -198
  121. package/docs/plans/docx/README.md +0 -9
  122. package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
  123. package/docs/plans/examples/wave-example-live-proof.md +0 -435
  124. package/docs/plans/master-plan.md +0 -224
  125. package/docs/plans/migration.md +0 -538
  126. package/docs/plans/operations/README.md +0 -7
  127. package/docs/plans/operations/wave-10-word-certification.md +0 -87
  128. package/docs/plans/operations/wave-8-railway-staging.md +0 -153
  129. package/docs/plans/operations/wave-9-manual-certification.md +0 -73
  130. package/docs/plans/platform/README.md +0 -9
  131. package/docs/plans/reference/legal-checklist-coverage.md +0 -258
  132. package/docs/plans/wave-orchestrator.md +0 -423
  133. package/docs/plans/waves/README.md +0 -75
  134. package/docs/plans/waves/completed/wave-0.md +0 -195
  135. package/docs/plans/waves/completed/wave-1.md +0 -379
  136. package/docs/plans/waves/completed/wave-10.md +0 -670
  137. package/docs/plans/waves/completed/wave-11.md +0 -335
  138. package/docs/plans/waves/completed/wave-12.md +0 -417
  139. package/docs/plans/waves/completed/wave-13.md +0 -316
  140. package/docs/plans/waves/completed/wave-14.md +0 -319
  141. package/docs/plans/waves/completed/wave-15.md +0 -321
  142. package/docs/plans/waves/completed/wave-16.md +0 -316
  143. package/docs/plans/waves/completed/wave-17.md +0 -331
  144. package/docs/plans/waves/completed/wave-18.md +0 -328
  145. package/docs/plans/waves/completed/wave-2.md +0 -438
  146. package/docs/plans/waves/completed/wave-3.md +0 -435
  147. package/docs/plans/waves/completed/wave-4.md +0 -430
  148. package/docs/plans/waves/completed/wave-5.md +0 -430
  149. package/docs/plans/waves/completed/wave-6.md +0 -430
  150. package/docs/plans/waves/completed/wave-7.md +0 -526
  151. package/docs/plans/waves/completed/wave-8.md +0 -596
  152. package/docs/plans/waves/completed/wave-9.md +0 -552
  153. package/docs/plans/waves/deferred/README.md +0 -14
  154. package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
  155. package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
  156. package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
  157. package/docs/plans/waves/design/README.md +0 -5
  158. package/docs/plans/waves/design/wave-1-a1.md +0 -309
  159. package/docs/plans/waves/reviews/README.md +0 -5
  160. package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
  161. package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
  162. package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
  163. package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
  164. package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
  165. package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
  166. package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
  167. package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
  168. package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
  169. package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
  170. package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
  171. package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
  172. package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
  173. package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
  174. package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
  175. package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
  176. package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
  177. package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
  178. package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
  179. package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
  180. package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
  181. package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
  182. package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
  183. package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
  184. package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
  185. package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
  186. package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
  187. package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
  188. package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
  189. package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
  190. package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
  191. package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
  192. package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
  193. package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
  194. package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
  195. package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
  196. package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
  197. package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
  198. package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
  199. package/docs/plans/waves/reviews/wave-8-security.md +0 -47
  200. package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
  201. package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
  202. package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
  203. package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
  204. package/docs/plans/waves/specs/README.md +0 -5
  205. package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
  206. package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
  207. package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
  208. package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
  209. package/docs/plans/waves/wave-19.md +0 -341
  210. package/docs/plans/waves/wave-20.md +0 -308
  211. package/docs/plans/waves/wave-21.md +0 -289
  212. package/docs/plans/waves/wave-22.md +0 -221
  213. package/docs/plans/waves/wave-23.md +0 -295
  214. package/docs/plans/waves/wave-24.md +0 -286
  215. package/docs/plans/waves/wave-25.md +0 -313
  216. package/docs/plans/waves/wave-26.md +0 -300
  217. package/docs/plans/waves/wave-27.md +0 -299
  218. package/docs/plans/waves/wave-28.md +0 -368
  219. package/docs/plans/waves/wave-29.md +0 -303
  220. package/docs/plans/waves/wave-30.md +0 -307
  221. package/docs/plans/waves/wave-31.md +0 -231
  222. package/docs/plans/waves/wave-32.md +0 -152
  223. package/docs/plans/waves/wave-33.md +0 -147
  224. package/docs/plans/waves/wave-34.md +0 -148
  225. package/docs/plans/waves/wave-35.md +0 -141
  226. package/docs/plans/waves/wave-36.md +0 -146
  227. package/docs/plans/xlsx/README.md +0 -14
  228. package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
  229. package/docs/reference/cli-reference.md +0 -600
  230. package/docs/reference/coordination-and-closure.md +0 -487
  231. package/docs/reference/deep-research-report (15).md +0 -25
  232. package/docs/reference/docx/README.md +0 -10
  233. package/docs/reference/legal-checklist.md +0 -445
  234. package/docs/reference/live-proof-waves.md +0 -199
  235. package/docs/reference/ooxml-compliance.md +0 -129
  236. package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
  237. package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
  238. package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
  239. package/docs/reference/public-api.md +0 -456
  240. package/docs/reference/repository-guidance.md +0 -58
  241. package/docs/reference/runtime-config/README.md +0 -182
  242. package/docs/reference/runtime-config/claude.md +0 -110
  243. package/docs/reference/runtime-config/codex.md +0 -82
  244. package/docs/reference/runtime-config/opencode.md +0 -93
  245. package/docs/reference/sample-waves.md +0 -105
  246. package/docs/reference/skills.md +0 -237
  247. package/docs/reference/templates/AGENTS.md +0 -78
  248. package/docs/reference/templates/HEARTBEAT.md +0 -7
  249. package/docs/reference/templates/IDENTITY.md +0 -23
  250. package/docs/reference/templates/SOUL.md +0 -36
  251. package/docs/reference/templates/TOOLS.md +0 -40
  252. package/docs/reference/templates/USER.md +0 -17
  253. package/docs/reference/wave-control.md +0 -184
  254. package/docs/reference/wave-planning-lessons.md +0 -167
  255. package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
  256. package/docs/reference/word-review-editor-ux-guide.md +0 -253
  257. package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
  258. package/docs/research/agent-context-sources.md +0 -178
  259. package/docs/research/coordination-failure-review.md +0 -290
  260. package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
  261. package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
  262. package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
  263. package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
  264. package/docs/research/xlsx/raw/README.md +0 -13
  265. package/docs/roadmap.md +0 -174
  266. package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
  267. package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
  268. package/docs/xlsx-react/README.md +0 -38
  269. package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
  270. package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
  271. package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
  272. package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
  273. package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
  274. package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
  275. package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
  276. package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
  277. package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
  278. package/examples/README.md +0 -16
  279. package/memory/MEMORY.md +0 -24
  280. package/pnpm-workspace.yaml +0 -4
  281. package/scripts/check-no-authored-js.sh +0 -13
  282. package/scripts/context7-api-check.sh +0 -65
  283. package/scripts/context7-export-env.sh +0 -42
  284. package/scripts/run-context7-mcp.sh +0 -8
  285. package/scripts/run-workspace-tests.sh +0 -15
  286. package/scripts/start-wave-10-local.sh +0 -189
  287. package/scripts/wave-agent-attach.sh +0 -47
  288. package/scripts/wave-auto-answer.sh +0 -118
  289. package/scripts/wave-dashboard-attach.sh +0 -13
  290. package/scripts/wave-launch.sh +0 -273
  291. package/scripts/wave-overnight-supervisor.sh +0 -145
  292. package/scripts/wave-status.sh +0 -379
  293. package/scripts/wave-watch.sh +0 -231
  294. package/services/README.md +0 -17
  295. package/services/openxml-validator/Dockerfile +0 -29
  296. package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
  297. package/services/openxml-validator/Program.cs +0 -436
  298. package/services/openxml-validator/README.md +0 -152
  299. package/services/openxml-validator/railway.json +0 -16
  300. package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
  301. package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
  302. package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
  303. package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
  304. package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
  305. package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
  306. package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
  307. package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
  308. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
  309. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
  310. package/services/react-word-editor/Dockerfile +0 -26
  311. package/services/react-word-editor/README.md +0 -254
  312. package/services/react-word-editor/app/api/certification/route.ts +0 -79
  313. package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
  314. package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
  315. package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
  316. package/services/react-word-editor/app/api/exports/route.ts +0 -81
  317. package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
  318. package/services/react-word-editor/app/api/health/route.ts +0 -70
  319. package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
  320. package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
  321. package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
  322. package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
  323. package/services/react-word-editor/app/api/uploads/route.ts +0 -70
  324. package/services/react-word-editor/app/api/validate/route.ts +0 -310
  325. package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
  326. package/services/react-word-editor/app/certification/page.tsx +0 -32
  327. package/services/react-word-editor/app/dashboard/page.tsx +0 -7
  328. package/services/react-word-editor/app/demo/page.tsx +0 -30
  329. package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
  330. package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
  331. package/services/react-word-editor/app/fixtures/page.tsx +0 -7
  332. package/services/react-word-editor/app/globals.css +0 -121
  333. package/services/react-word-editor/app/layout.tsx +0 -32
  334. package/services/react-word-editor/app/page.tsx +0 -30
  335. package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
  336. package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
  337. package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
  338. package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
  339. package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
  340. package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
  341. package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
  342. package/services/react-word-editor/lib/certification-bundle.ts +0 -796
  343. package/services/react-word-editor/lib/certification-store.ts +0 -661
  344. package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
  345. package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
  346. package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
  347. package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
  348. package/services/react-word-editor/lib/editor-session.ts +0 -228
  349. package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
  350. package/services/react-word-editor/lib/harness-client.ts +0 -347
  351. package/services/react-word-editor/lib/harness-config.json +0 -30
  352. package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
  353. package/services/react-word-editor/lib/harness-config.ts +0 -21
  354. package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
  355. package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
  356. package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
  357. package/services/react-word-editor/lib/private-mode.ts +0 -61
  358. package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
  359. package/services/react-word-editor/lib/regression-report.ts +0 -896
  360. package/services/react-word-editor/lib/run-artifacts.ts +0 -934
  361. package/services/react-word-editor/lib/run-history.ts +0 -755
  362. package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
  363. package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
  364. package/services/react-word-editor/lib/storage.ts +0 -953
  365. package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
  366. package/services/react-word-editor/lib/validator-client.ts +0 -95
  367. package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
  368. package/services/react-word-editor/middleware.ts +0 -35
  369. package/services/react-word-editor/next-env.d.ts +0 -6
  370. package/services/react-word-editor/next.config.mjs +0 -15
  371. package/services/react-word-editor/package.json +0 -38
  372. package/services/react-word-editor/postcss.config.mjs +0 -8
  373. package/services/react-word-editor/railway.json +0 -21
  374. package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
  375. package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
  376. package/services/react-word-editor/tsconfig.json +0 -39
  377. package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
  378. package/skills/README.md +0 -48
  379. package/skills/domain-docx-compatibility/SKILL.md +0 -44
  380. package/skills/domain-docx-compatibility/skill.json +0 -19
  381. package/skills/domain-editor-architecture/SKILL.md +0 -49
  382. package/skills/domain-editor-architecture/skill.json +0 -19
  383. package/skills/domain-legal-review/SKILL.md +0 -39
  384. package/skills/domain-legal-review/skill.json +0 -19
  385. package/skills/provider-aws/SKILL.md +0 -117
  386. package/skills/provider-aws/adapters/claude.md +0 -1
  387. package/skills/provider-aws/adapters/codex.md +0 -1
  388. package/skills/provider-aws/references/service-verification.md +0 -39
  389. package/skills/provider-aws/skill.json +0 -54
  390. package/skills/provider-custom-deploy/SKILL.md +0 -64
  391. package/skills/provider-custom-deploy/skill.json +0 -50
  392. package/skills/provider-docker-compose/SKILL.md +0 -96
  393. package/skills/provider-docker-compose/adapters/local.md +0 -1
  394. package/skills/provider-docker-compose/skill.json +0 -53
  395. package/skills/provider-github-release/SKILL.md +0 -121
  396. package/skills/provider-github-release/adapters/claude.md +0 -1
  397. package/skills/provider-github-release/adapters/codex.md +0 -1
  398. package/skills/provider-github-release/skill.json +0 -55
  399. package/skills/provider-kubernetes/SKILL.md +0 -143
  400. package/skills/provider-kubernetes/adapters/claude.md +0 -1
  401. package/skills/provider-kubernetes/adapters/codex.md +0 -1
  402. package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
  403. package/skills/provider-kubernetes/skill.json +0 -52
  404. package/skills/provider-railway/SKILL.md +0 -123
  405. package/skills/provider-railway/adapters/claude.md +0 -1
  406. package/skills/provider-railway/adapters/codex.md +0 -1
  407. package/skills/provider-railway/adapters/local.md +0 -1
  408. package/skills/provider-railway/adapters/opencode.md +0 -1
  409. package/skills/provider-railway/references/verification-commands.md +0 -39
  410. package/skills/provider-railway/skill.json +0 -71
  411. package/skills/provider-ssh-manual/SKILL.md +0 -97
  412. package/skills/provider-ssh-manual/skill.json +0 -54
  413. package/skills/repo-coding-rules/SKILL.md +0 -55
  414. package/skills/repo-coding-rules/skill.json +0 -34
  415. package/skills/role-cont-eval/SKILL.md +0 -91
  416. package/skills/role-cont-eval/adapters/codex.md +0 -1
  417. package/skills/role-cont-eval/skill.json +0 -36
  418. package/skills/role-cont-qa/SKILL.md +0 -100
  419. package/skills/role-cont-qa/adapters/claude.md +0 -1
  420. package/skills/role-cont-qa/skill.json +0 -36
  421. package/skills/role-deploy/SKILL.md +0 -97
  422. package/skills/role-deploy/skill.json +0 -36
  423. package/skills/role-design/SKILL.md +0 -50
  424. package/skills/role-design/skill.json +0 -36
  425. package/skills/role-documentation/SKILL.md +0 -76
  426. package/skills/role-documentation/skill.json +0 -36
  427. package/skills/role-implementation/SKILL.md +0 -45
  428. package/skills/role-implementation/skill.json +0 -36
  429. package/skills/role-infra/SKILL.md +0 -81
  430. package/skills/role-infra/skill.json +0 -36
  431. package/skills/role-integration/SKILL.md +0 -91
  432. package/skills/role-integration/skill.json +0 -36
  433. package/skills/role-planner/SKILL.md +0 -39
  434. package/skills/role-planner/skill.json +0 -21
  435. package/skills/role-research/SKILL.md +0 -65
  436. package/skills/role-research/skill.json +0 -36
  437. package/skills/role-security/SKILL.md +0 -60
  438. package/skills/role-security/skill.json +0 -36
  439. package/skills/runtime-claude/SKILL.md +0 -66
  440. package/skills/runtime-claude/skill.json +0 -36
  441. package/skills/runtime-codex/SKILL.md +0 -58
  442. package/skills/runtime-codex/skill.json +0 -36
  443. package/skills/runtime-local/SKILL.md +0 -46
  444. package/skills/runtime-local/skill.json +0 -36
  445. package/skills/runtime-opencode/SKILL.md +0 -58
  446. package/skills/runtime-opencode/skill.json +0 -36
  447. package/skills/signal-hygiene/SKILL.md +0 -51
  448. package/skills/signal-hygiene/skill.json +0 -20
  449. package/skills/tui-design/SKILL.md +0 -77
  450. package/skills/tui-design/references/tui-design.md +0 -259
  451. package/skills/tui-design/skill.json +0 -36
  452. package/skills/wave-core/SKILL.md +0 -141
  453. package/skills/wave-core/references/marker-syntax.md +0 -70
  454. package/skills/wave-core/skill.json +0 -35
  455. package/test/README.md +0 -16
  456. package/test/core/formatting-commands.test.ts +0 -285
  457. package/test/core/image-commands.test.ts +0 -298
  458. package/test/core/mapping.test.ts +0 -186
  459. package/test/core/text-commands.test.ts +0 -176
  460. package/test/fixtures/docx/F01-basic-contract.docx +0 -0
  461. package/test/fixtures/docx/F01-basic-contract.md +0 -33
  462. package/test/fixtures/docx/F02-headings-styles.docx +0 -0
  463. package/test/fixtures/docx/F02-headings-styles.md +0 -33
  464. package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
  465. package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
  466. package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
  467. package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
  468. package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
  469. package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
  470. package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
  471. package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
  472. package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
  473. package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
  474. package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
  475. package/test/fixtures/docx/F08-hyperlinks.md +0 -33
  476. package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
  477. package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
  478. package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
  479. package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
  480. package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
  481. package/test/fixtures/docx/F11-redlines-basic.md +0 -33
  482. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
  483. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
  484. package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
  485. package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
  486. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
  487. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
  488. package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
  489. package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
  490. package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
  491. package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
  492. package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
  493. package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
  494. package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
  495. package/test/fixtures/docx/F18-content-controls-template.md +0 -33
  496. package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
  497. package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
  498. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
  499. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
  500. package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
  501. package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
  502. package/test/fixtures/docx/README.md +0 -74
  503. package/test/fixtures/docx/certification-manifest.json +0 -104
  504. package/test/fixtures/docx/fixtures.manifest.json +0 -196
  505. package/test/fixtures/encrypted-docx/README.md +0 -27
  506. package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
  507. package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
  508. package/test/fixtures/scenarios/docx/README.md +0 -25
  509. package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
  510. package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
  511. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
  512. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
  513. package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
  514. package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
  515. package/test/formats/xlsx/model/workbook.test.ts +0 -669
  516. package/test/helpers/dom-setup.ts +0 -124
  517. package/test/io/comment-roundtrip.test.ts +0 -272
  518. package/test/io/complex-content-roundtrip.test.ts +0 -632
  519. package/test/io/docx-compatibility-regression.test.ts +0 -199
  520. package/test/io/docx-session.test.ts +0 -1495
  521. package/test/io/footnotes-roundtrip.test.ts +0 -318
  522. package/test/io/headers-footers-roundtrip.test.ts +0 -547
  523. package/test/io/numbering-roundtrip.test.ts +0 -234
  524. package/test/io/package-reader.test.ts +0 -199
  525. package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
  526. package/test/io/preserved-package-roundtrip.test.ts +0 -365
  527. package/test/io/property-completeness.test.ts +0 -292
  528. package/test/io/revision-roundtrip.test.ts +0 -347
  529. package/test/io/structural-blocks.test.ts +0 -202
  530. package/test/io/table-media-roundtrip.test.ts +0 -448
  531. package/test/io/table-properties-roundtrip.test.ts +0 -569
  532. package/test/io/table-roundtrip.test.ts +0 -302
  533. package/test/io/text-roundtrip.test.ts +0 -344
  534. package/test/model/canonical-document.test.ts +0 -285
  535. package/test/preservation/opaque-fragment-store.test.ts +0 -121
  536. package/test/preservation/package-preservation.test.ts +0 -395
  537. package/test/preservation/store.test.ts +0 -84
  538. package/test/review/comment-remapping.test.ts +0 -220
  539. package/test/review/comment-store.test.ts +0 -180
  540. package/test/review/move-revisions.test.ts +0 -143
  541. package/test/review/property-change-revisions.test.ts +0 -225
  542. package/test/review/revision-actions.test.ts +0 -330
  543. package/test/review/revision-store.test.ts +0 -193
  544. package/test/runtime/session-capabilities.test.ts +0 -260
  545. package/test/runtime/table-commands.test.ts +0 -356
  546. package/test/runtime/table-schema.test.ts +0 -221
  547. package/test/runtime/tracked-changes-toggle.test.ts +0 -107
  548. package/test/ui/comment-review-surface.test.tsx +0 -114
  549. package/test/ui/reduced-motion-toggle.test.tsx +0 -137
  550. package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
  551. package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
  552. package/test/ui/word-review-editor.test.js +0 -188
  553. package/test/ui/word-review-editor.test.tsx +0 -280
  554. package/test/ui-tailwind/search-plugin.test.ts +0 -286
  555. package/test/validation/compatibility-engine.test.ts +0 -336
  556. package/test/validation/compatibility-report.test.ts +0 -189
  557. package/test/validation/low-priority-word-surfaces.test.ts +0 -282
  558. package/test/validation/malformed-doc.test.ts +0 -113
  559. package/test-results/.last-run.json +0 -4
  560. 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.