@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,871 +0,0 @@
1
- # Excel-Compatible XLSX Editor Research Pack
2
-
3
- Table of contents
4
-
5
- - Interpretation of the problem
6
- - Research plan
7
- - Findings
8
- - Recommended design / decisions
9
- - Risks and open questions
10
- - Concrete deliverable in the requested format
11
- - Spreadsheet Compatibility and Testing Specification
12
- - XLSX OOXML Compliance
13
- - React Component Architecture and Front-End Structure Specification for an Excel-Compatible Spreadsheet Editor
14
- - SpreadsheetEditor UX Guide
15
- - Spreadsheet Editor — Frontend Architecture
16
- - Canonical Workbook Model, Selection Semantics, and Command/Transaction Design
17
- - Formula Engine, Recalculation Strategy, and Reference Integrity for an Excel-Compatible Editor
18
- - Review, Comment, Diff, and Change-Inspection Model for an Excel-Compatible Editor
19
- - Performance Strategy for a Main-Thread Excel-Compatible Spreadsheet Editor
20
- - XLSX Fixture Corpus, Scenario Program, and Certification Plan
21
- - Shared OpenXML Editor Platform for DOCX and XLSX
22
- - Agent / LLM Interaction Layer for DOCX and XLSX Editors
23
- - Sources
24
-
25
- ## Interpretation of the problem
26
-
27
- You are building an embeddable React spreadsheet editor that can import an `.xlsx`, allow runtime-driven edits, and export an `.xlsx` that reopens in modern Excel without repair prompts or silent supported-content loss. The workbook is the product; the UI is a projection of runtime-owned canonical state and must never become the canonical truth. All mutations must flow `command -> transaction -> commit`, not direct UI mutation.
28
-
29
- The file format must be treated as an OOXML/Open Packaging Conventions (OPC) package (parts + content types + relationships), not “some XML files in a zip”. In practice, that means correctness is (at least) three layers:
30
-
31
- - Package correctness (OPC invariants: `[Content_Types].xml`, `/_rels/.rels`, part-level `.rels`, URI/part-name rules, relationship resolution).
32
- - Markup correctness (SpreadsheetML + related schemas, plus markup compatibility / extensibility for unknown namespaces and future features).
33
- - Host correctness (Excel’s behavior, including its extensions beyond baseline OOXML, is the final standard).
34
-
35
- Unsupported-but-preservable content must be preserved byte-for-byte and relationship-for-relationship unless an explicit response policy says otherwise (preserve / lock / warn / block / fail). Excel-specific extension parts (threaded comments, persons, rich values, named sheet views, slicers, etc.) exist in real-world files and must not be dropped.
36
-
37
- A key reality constraint: the GitHub connector available in this environment does not expose the specified repository (`bwllaming/docx-react-component`), so I could not directly mirror your DOCX sibling’s existing repo-level architectural documents. The pack below is therefore written as a “repo-seeding” doc set that follows your framing constraints and cites primary/official XLSX sources, but it does not quote or align to any unobservable implementation details from your existing DOCX repo.
38
-
39
- ## Research plan
40
-
41
- Information needs (what must be true to ship a real Excel-compatible editor):
42
-
43
- - OPC invariants and operational consequences for a package-preserving editor: relationships, content types, part naming, and safe rewrite rules.
44
- - SpreadsheetML “minimum workbook” and core parts/relationships (workbook.xml, worksheets, shared strings, styles, calc chain), plus what is optional vs required.
45
- - Excel host limits that affect UI and engine design (rows/cols, cell text length, formula length, format limits), plus how those constraints influence virtualization and data structures.
46
- - Excel extensions to OOXML you will encounter in modern workbooks (threaded comments/persons/mentions, named sheet views, rich values, slicers), and explicit preservation requirements inside those extensions.
47
- - Encrypted/protected documents: when `.xlsx` is not an OPC zip at all (EncryptedPackage) and must be treated as unsupported-fatal unless you implement the cryptography structure.
48
-
49
- Execution approach:
50
-
51
- - Attempted to start with GitHub connector review (required by your instructions), but the configured GitHub account here does not list or search the specified repo, so no repo-derived evidence could be incorporated.
52
- - Performed web research prioritizing primary/official sources: Microsoft Learn (Open XML SDK docs; Microsoft Open Specifications PDFs for MS-XLSX; Office cryptography structure), and Excel limits from Microsoft Support.
53
- - Treated normative standards vs observed Excel behavior explicitly: “normative” for schema/package requirements reported as ISO/IEC/OOXML requirements; “host behavior” as Microsoft Excel behavior and Microsoft’s extension specs.
54
-
55
- ## Findings
56
-
57
- Package and document structure facts (normative baseline)
58
-
59
- - OPC packages model a document as a set of parts with typed content and explicit relationships; relationships can be package-level (source = the package) or part-level (source = a part), and relationship targets can be internal parts or external resources.
60
- - In SpreadsheetML, a workbook’s logical structure centers on `<workbook>` containing `<sheets>` and `<sheet>` elements; the `<sheet>` elements reference worksheet parts via relationship IDs, and each worksheet is stored as a separate XML part.
61
- - A “minimum workbook” requires at least one sheet with a unique `sheetId` and a relationship ID pointing to the worksheet definition; the workbook relationships part (`workbook.xml.rels`) binds those IDs to worksheet part targets.
62
- - A worksheet part contains the sheet grid data in `<sheetData>`; cells are stored with references like `A1` and can contain values and/or formulas.
63
- - Shared strings: a shared string table part (`sharedStrings.xml`) is the canonical deduplication mechanism for strings; a workbook can reference strings by index rather than inline storage, and Excel typically writes a shared string table when it saves files (though it is not required for validity).
64
- - Formulas: formula text is stored in `<f>` within a cell; cached results may be stored in `<v>`, and the cached value can be omitted (in which case the reader can recompute based on the formula).
65
- - Calculation chain (`calcChain.xml`): at most one calculation-chain part can exist; it records an ordered set of formula cells last calculated, but calculation chain information is not required because an application can construct dependencies at load-time.
66
-
67
- Host behavior and “real-world Excel” constraints
68
-
69
- - Excel hard limits that materially affect editor design include: 1,048,576 rows × 16,384 columns, 32,767 characters per cell, ~8,192 characters per formula, and constraints on format/style counts.
70
- - Excel extension specifications exist beyond baseline OOXML, and Microsoft explicitly frames MS-XLSX as extensions to ISO/IEC 29500-1/3; only certain sections are normative within that extension spec.
71
- - Modern Excel workbooks may include advanced extension parts like threaded comments, persons/mentions, named sheet views, slicers, rich value structures, etc.
72
- - Threaded comments vs legacy comments: MS-XLSX describes threaded comments as a system that “replaces and/or works in addition to legacy comments”; it specifies legacy comment placeholders used for backward compatibility and details reconciliation behavior.
73
- - Named Sheet Views: MS-XLSX specifies that the presence of a Named Sheet Views part indicates at least one named sheet view and that it must be the target of an implicit relationship from the worksheet part.
74
- - Rich values: MS-XLSX specifies “rich value” types (including spill/timeout/external errors and other structures) and explicitly states that if a rich value has an unknown rich value type, it must be preserved.
75
-
76
- Edge cases that force explicit “fail” classification
77
-
78
- - Encrypted Office documents are not editable as normal OPC packages because the document can be wrapped in the Office Document Cryptography Structure; specifically, the `\EncryptedPackage` stream contains the entire ECMA-376 source file in compressed, encrypted form, with encryption parameters found in `\EncryptionInfo`.
79
- This means “open with zip -> parse XML” fails for such files unless you implement decryption, so “unsupported-fatal” (fail) is the honest v1 stance.
80
-
81
- ## Recommended design / decisions
82
-
83
- Core principle decisions (to keep the architecture honest and “Excel-reopen safe”)
84
-
85
- - Use a package-preserving runtime that owns (a) canonical workbook state and (b) a preservation-grade representation of the OPC package graph (parts + relationships + content types + unknown bytes). Do not model “the workbook” as a React state tree. The React component subscribes to runtime projections.
86
- - Build a command/transaction system where every UI action is translated into a typed command, validated into a transaction, then committed atomically to the runtime state. This enables: undo/redo, deterministic diffs, invariants enforcement, and compatibility-aware blocking/warning.
87
- - Make “compatibility posture” first-class. Every feature/part category is either:
88
- - Supported-editable (safe import → runtime edit → export → reopen),
89
- - Preserve-only (round-trip but no semantic edits), or
90
- - Unsupported-fatal (cannot safely open or cannot safely export).
91
- Micro-stances for operations: preserve / lock / warn / block / fail.
92
- - Default: never drop unknown content. When you must remove or regenerate derived artifacts (like calc chain), do it explicitly and document it as a controlled, compatibility-motivated transformation (typically “warn” or “preserve-with-normalization”), with fixtures proving Excel accepts the result.
93
- - Certify on Excel behavior, but gate earlier with Open XML structural/schema validation where possible (Open XML SDK validation in CI, plus custom OPC invariant checks).
94
-
95
- Pragmatic v1 scope choices (blunt, on purpose)
96
-
97
- - v1 should focus on “grid-editing” and the minimal set of workbook features that can be made Excel-reopen safe with high confidence: cell values, basic formulas-as-strings (plus reference updating), row/column sizing, frozen panes and basic sheet view selection state, basic styles/number formats, merges, basic data types, sheet add/rename/reorder, and defined names (if included).
98
- - Treat most higher-order Excel objects as preserve-only in v1: pivot tables/caches, charts, slicers, timelines, external connections/data model, rich values, named sheet views, conditional formatting, and threaded comments (unless you commit to implementing their multi-part invariants).
99
- - Treat encrypted/IRM-protected documents as unsupported-fatal in v1, with a clear failure message and optional “export untouched bytes” path only if you are not required to modify.
100
-
101
- ## Risks and open questions
102
-
103
- - Standards availability vs practical implementation: ISO/ECMA specs are authoritative but not always freely retrievable programmatically (license acceptance flows blocked access here), so reliance shifts to Microsoft Learn summaries and Microsoft Open Specifications where accessible. This introduces the risk of missing a subtle normative constraint that Excel enforces.
104
- - Excel host behavior is the final standard, but some behaviors are underspecified publicly. Your certification plan must include Excel Desktop automation (Windows) to catch repair prompts and silent repairs that schema validation will not detect.
105
- - “Preserve-only” is deceptively hard: even if you don’t “edit a feature,” other edits (row insertion, copy/paste, range move) can implicitly require updating references inside that preservable feature. If you can’t update those internal references safely, you must lock/block range mutations that intersect them.
106
- - Formula engine scope: fully replicating Excel calculation semantics is enormous; v1 likely needs a staged approach (reference-parsing and dependency graph first; partial evaluation second; full function parity never). Any mismatch can cause confusing UI vs exported recalculation. Excel’s own limits and function lists shape what you can reasonably support.
107
- - Rich values, new function families, and “future features”: the MS-XLSX extension spec is updated frequently and includes modern features (rich values, external code service errors, etc.). If you parse/serialize incorrectly, you will break files users expect Excel to open cleanly. The safe stance is preserve-only with strong invariants.
108
- - Tooling limitation: the PDF screenshot requirement could not be satisfied in this environment due to safe-URL redirects when attempting screenshot extraction on MS-XLSX. The pack relies on the PDF’s extracted text plus Microsoft Learn pages rather than page-image verification.
109
-
110
- ## Concrete deliverable in the requested format
111
-
112
- Below are the requested documents. Each includes a suggested repo filename, a short purpose statement, and full markdown content. Terminology is consistent across the full set:
113
-
114
- - **Runtime**: non-React canonical state machine (workbook truth).
115
- - **Package Graph**: OPC parts/relationships/content types + preserved bytes.
116
- - **Projection**: derived view model for UI (viewport, formatting for paint, etc.).
117
- - **Command → Transaction → Commit**: the only mutation path.
118
- - **Posture**: preserve / lock / warn / block / fail (operation-level responses).
119
-
120
- ---
121
-
122
- **File:** `docs/spreadsheet-compatibility-and-testing-spec.md`
123
- **Purpose:** Define Excel-compatibility targets, posture taxonomy, certification gates, and the test matrix that proves “reopen in Excel without repair prompts or silent loss.”
124
-
125
- ### Spreadsheet Compatibility and Testing Specification
126
-
127
- **Status:** Draft v1
128
- **Non-negotiable standard:** Files exported by this editor must reopen in recent Excel environments without repair prompts and without silent loss of **supported** content.
129
-
130
- **Normative vs host correctness**
131
-
132
- - **Spec-level correctness (normative):** We satisfy OPC and SpreadsheetML structural requirements as described in ISO/IEC 29500 and related specifications; for practical implementation details, Microsoft’s Open XML SDK guidance and Microsoft Open Specifications are treated as strong references.
133
- - **Application-level correctness (host):** Microsoft Excel’s behavior is the final arbiter; passing schema validation but triggering Excel repair is a fail.
134
-
135
- **Compatibility posture model (global)**
136
-
137
- Every *feature area* and every *operation attempt* yields an explicit posture result:
138
-
139
- - **preserve**: The editor round-trips the content without semantic understanding; no user-visible mutation occurs; export must be byte/graph-preserving for that content.
140
- - **lock**: Content is visible/selectable but is read-only; attempts to modify return lock with an explanation.
141
- - **warn**: Operation proceeds but may alter semantics or cause Excel to recalc/normalize; warn must be surfaced to host and (optionally) UI.
142
- - **block**: Operation is prevented because it would risk producing a workbook that Excel repairs or that loses supported content; document state remains unchanged.
143
- - **fail**: The document cannot be opened or saved safely. Example: encrypted package without decryption support.
144
-
145
- **Supported / preserve-only / unsupported-fatal categories**
146
-
147
- - **Supported-editable**: import → runtime edit → export → reopen in Excel with no repair AND with preserved supported semantics.
148
- - **Preserve-only**: import → no semantic edits (or only cosmetic/metadata edits that are proven safe) → export → reopen; editor must not drop or corrupt.
149
- - **Unsupported-fatal**: cannot open or cannot export safely (e.g., encrypted/IRM docs).
150
-
151
- **Target Excel environments (certification set)**
152
-
153
- We certify against at least:
154
-
155
- - Excel for Microsoft 365 (current channel) on Windows
156
- - Excel 2021+ on Windows
157
- - Excel for Microsoft 365 on macOS
158
- - Excel for the web (smoke validation: open, validate calculations/visuals minimally)
159
-
160
- Rationale: Excel limits/specs are documented across versions and apply broadly; our exported files must align with these constraints.
161
-
162
- **Definition of “repair prompt” failure**
163
-
164
- Fail if any of these occur when opening export output:
165
-
166
- - Excel displays “We found a problem with some content…” and repairs.
167
- - Excel opens but silently removes/rewrites **supported** features (e.g., our supported cell values disappear, formatting disappears, sheet structure changes).
168
- - Excel writes a repair log indicating removed records in supported areas.
169
-
170
- **Test strategy tiers**
171
-
172
- 1) **Static package invariants tests (fast, required in CI)**
173
- - OPC graph traversal: all parts reachable via relationships; `[Content_Types].xml` contains entries for all parts; relationship targets resolve; no dangling relationship IDs.
174
- - SpreadsheetML minimum structure checks (workbook.xml, workbook rels, at least one worksheet).
175
-
176
- 2) **Schema and markup validation (CI, required)**
177
- - Use Open XML SDK validation tooling in CI to validate produced packages against known schemas where possible; failures block release. (Open XML SDK provides strongly-typed parts and is a standard reference toolchain.)
178
-
179
- 3) **Round-trip invariants (CI, required)**
180
- For each fixture: `import -> no-op export` must satisfy:
181
- - Byte preservation for preserve-only parts (exact bytes) OR documented normalization that is proven Excel-safe.
182
- - Relationship graph preservation (IDs may change only if we fully rewrite consistent references).
183
-
184
- 4) **Excel host automation (release gate; nightly + release candidates)**
185
- - Open exported workbook in Excel Desktop automation (Windows runner) with alerts captured.
186
- - Save-as and reopen to ensure Excel can write it back without further repair.
187
-
188
- 5) **Scenario-based functional tests (CI + nightly)**
189
- - UI-level automation: edit operations, undo/redo, copy-paste, row/column insert/delete, formatting, multi-sheet edits.
190
-
191
- **Compatibility test matrix**
192
-
193
- Each row = (feature) × (operation) × (expected posture) × (evidence fixture)
194
-
195
- Examples:
196
-
197
- - Cell value edit (number/string/bool/error): Supported-editable
198
- - Formula edit (string-level): Supported-editable for syntax-preserving edits; warn if function unsupported for evaluation but preserve formula text; block if reference rewriting can’t be guaranteed.
199
- - Shared strings conversion: warn if converting inline strings to shared strings or vice versa; Excel typically writes sharedStrings on save, so normalization toward shared strings is usually Excel-aligned, but must be proven in fixtures.
200
- - Calc chain: warn if dropping calcChain to force Excel rebuild; calcChain is not required and can be recomputed by the application.
201
- - Threaded comments: preserve-only in v1 unless we implement the multi-part invariants and reconciliation behavior.
202
- - Named sheet views: preserve-only; block operations that require rewriting their internal references unless implemented.
203
- - EncryptedPackage: fail on open (unsupported-fatal).
204
-
205
- **Release gates**
206
-
207
- - Gate A (CI): package invariants + schema validation + round-trip no-op export.
208
- - Gate B (Nightly): scenario edits across fixture corpus + Excel automation open/reopen.
209
- - Gate C (Release): full corpus Excel automation + manual spot-check for top customer files.
210
-
211
- ---
212
-
213
- **File:** `docs/xlsx-ooxml-compliance.md`
214
- **Purpose:** Define OPC and SpreadsheetML compliance boundaries, rewrite rules, normalization policy, and strict vs transitional behavior.
215
-
216
- ### XLSX OOXML Compliance
217
-
218
- **Status:** Draft v1
219
-
220
- **Baseline definition**
221
-
222
- An `.xlsx` is an OPC package: a zip-based physical container representing a logical graph of typed parts connected by relationships. Relationships exist at package level (`/_rels/.rels`) and at part level (`<partname>.rels`), and targets can be internal parts or external resources.
223
-
224
- **Compliance objectives**
225
-
226
- - Produce packages that Excel opens without repair prompts.
227
- - Preserve unknown but valid content.
228
- - Maintain relationship integrity, content types correctness, and markup compatibility behavior.
229
-
230
- **OPC invariants we enforce**
231
-
232
- - **Content types:** `[Content_Types].xml` must declare default/override content types for parts; new parts require updating content types.
233
- - **Relationships:**
234
- - Package relationships stored in `/_rels/.rels`.
235
- - Part relationships stored in `_rels/<part>.rels`.
236
- - Targets must resolve to existing parts when internal.
237
- - **Graph discoverability:** all meaningful parts must be discoverable by traversing relationships from the package root(s). (We treat this as a “must” for our editor even if some producers violate it; we preserve violations but do not create new ones.)
238
-
239
- **SpreadsheetML minimal structure invariants**
240
-
241
- - Workbook must contain sheets and each `<sheet>` references a worksheet part via relationship ID; workbook relationships bind IDs to worksheet targets.
242
- - Each worksheet contains `<sheetData>` as the cell table container.
243
- - Shared strings: if present, there is exactly one shared string table part for the workbook.
244
- - Calculation chain: if present, there is no more than one calculation chain part.
245
-
246
- **Strict vs Transitional**
247
-
248
- - We accept both strict and transitional content as input.
249
- - We default to exporting transitional-compatible structures unless a customer explicitly requires strict and we can prove strict correctness in Excel (because many Excel-produced files are transitional in practice and include Microsoft extension namespaces).
250
-
251
- **Markup compatibility / extensibility policy**
252
-
253
- - Preserve unknown namespace declarations, `mc:Ignorable` attributes, and unknown elements/attributes in ignorable namespaces. (Example worksheets may include `mc:Ignorable="x14ac"` and related namespaces.)
254
- - Never drop `extLst` or extension payloads; treat them as preserve-only unless explicitly supported.
255
-
256
- **Normalization policy (explicit and limited)**
257
-
258
- We allow a small set of “safe normalizations” that are validated by Excel fixtures:
259
-
260
- - **calcChain handling:** we may remove or rebuild `calcChain.xml` if it becomes inconsistent after edits; because calc chain is not required and does not dictate runtime calculation order, Excel can rebuild. This must be a **warn** posture and must be covered by fixtures.
261
- - **Shared strings handling:** we may normalize to shared strings on export (because Excel typically does), but only if we correctly rewrite indices and preserve rich text runs, and only after fixture proof.
262
- - **Relationship ID regeneration:** allowed only when we fully rewrite all referencing attributes. Otherwise, preserve existing IDs.
263
-
264
- Any normalization outside this list requires a design review and certification fixtures.
265
-
266
- **Unsupported-fatal compliance cases**
267
-
268
- - Office cryptography wrapper (EncryptedPackage): fail to open unless we implement decryption; this is not an OPC zip file we can parse directly.
269
-
270
- ---
271
-
272
- **File:** `docs/react-component-architecture-spec.md`
273
- **Purpose:** Specify the embeddable React component, typed public API, runtime ownership model, and front-end module boundaries.
274
-
275
- ### React Component Architecture and Front-End Structure Specification for an Excel-Compatible Spreadsheet Editor
276
-
277
- **Status:** Draft v1
278
-
279
- **Non-negotiable architecture rules**
280
-
281
- - React does not own workbook truth. Runtime owns canonical workbook state and all mutations.
282
- - UI is a projection (derived view model) that is fully reproducible from runtime state.
283
- - All mutations go through `command -> transaction -> commit`.
284
- - Unsupported content is preserved; operations that would affect it must return explicit posture results.
285
-
286
- **Suggested package layout**
287
-
288
- - `packages/ooxml-opc/` (shared)
289
- - Zip IO, content types, relationships, part addressing, graph traversal, byte preservation.
290
- - `packages/ooxml-mc/` (shared)
291
- - Markup compatibility helpers: preserve unknown namespaces, ignore rules, safe parse/serialize.
292
- - `packages/spreadsheet-runtime/` (xlsx-specific)
293
- - Canonical workbook model, command/transaction system, projections, export pipeline.
294
- - `packages/spreadsheet-react/` (xlsx-specific)
295
- - React component, event adapters, input system, virtualized grid renderer.
296
- - `packages/editor-platform/` (shared)
297
- - Command bus interfaces, transaction log, undo/redo framework, diagnostics/events.
298
- - `packages/fixtures/` (shared)
299
- - Fixture corpus and golden exports, validation harness.
300
-
301
- **Public API shape (TypeScript)**
302
-
303
- Core design goals:
304
- - Host can supply an input package, receive runtime instance, subscribe to events, and request export.
305
- - Host can inject policy decisions (posture handling) and integrate with persistence.
306
-
307
- Sketch:
308
-
309
- ```ts
310
- export type Posture = "preserve" | "lock" | "warn" | "block" | "fail";
311
-
312
- export interface PostureResult {
313
- posture: Posture;
314
- code: string;
315
- message: string;
316
- details?: Record<string, unknown>;
317
- }
318
-
319
- export interface SpreadsheetEditorHostCallbacks {
320
- onReady?: (runtime: SpreadsheetRuntimeHandle) => void;
321
- onEvent?: (event: SpreadsheetRuntimeEvent) => void;
322
- onPosture?: (result: PostureResult) => void;
323
- }
324
-
325
- export interface SpreadsheetEditorProps {
326
- input?: ArrayBuffer; // .xlsx bytes
327
- readOnly?: boolean;
328
-
329
- // Host policy hooks
330
- policy?: SpreadsheetPolicy;
331
-
332
- // Callbacks
333
- host?: SpreadsheetEditorHostCallbacks;
334
-
335
- // UI configuration
336
- theme?: SpreadsheetTheme;
337
- initialViewport?: { sheetId?: string; topRow?: number; leftCol?: number };
338
-
339
- // Optional: external persistence hooks
340
- persistence?: {
341
- requestSave?: (bytes: Uint8Array) => Promise<void>;
342
- };
343
- }
344
- ```
345
-
346
- **Runtime handle**
347
-
348
- ```ts
349
- export interface SpreadsheetRuntimeHandle {
350
- getDocId(): string;
351
- getStateVersion(): number;
352
-
353
- // Query / projection
354
- getWorkbookSummary(): WorkbookSummary;
355
- getSheetProjection(request: SheetProjectionRequest): SheetProjection;
356
-
357
- // Commands
358
- dispatch(cmd: SpreadsheetCommand): CommandDispatchResult;
359
-
360
- // Export
361
- exportXlsx(options?: ExportOptions): Promise<Uint8Array>;
362
-
363
- // Undo/redo
364
- undo(): CommandDispatchResult;
365
- redo(): CommandDispatchResult;
366
-
367
- // Diagnostics
368
- getDiagnostics(): DiagnosticItem[];
369
- }
370
- ```
371
-
372
- **Command dispatch result (explicit posture)**
373
-
374
- ```ts
375
- export interface CommandDispatchResult {
376
- ok: boolean;
377
- posture?: PostureResult; // present when ok=false or when ok=true with warn
378
- transactionId?: string;
379
- appliedVersion?: number;
380
- }
381
- ```
382
-
383
- **React component behavior**
384
-
385
- - `SpreadsheetEditor` mounts, instantiates runtime (or uses provided runtime), loads input bytes, builds initial projection, renders.
386
- - UI events (mouse/keyboard) are translated into commands (e.g., `SetCellValue`, `MoveSelection`, `Paste`, `InsertRow`) and dispatched.
387
- - Runtime emits events; React subscribes and updates projections via selectors keyed by version + viewport.
388
-
389
- **Rendering strategy**
390
-
391
- - Virtualized grid (rows/cols) is mandatory due to Excel-scale constraints.
392
- - Rendering uses a “cell paint model” projection: visible cells are materialized with computed format tokens, display value, and interaction flags.
393
- - Fine-grained invalidation: projection computed per-tile (e.g., 64×64 cells) to avoid repainting entire viewport.
394
-
395
- ---
396
-
397
- **File:** `docs/spreadsheeteditor-ux-guide.md`
398
- **Purpose:** Define UX rules for selection, editing, copy/paste, warnings/locks, and how preserve-only content is presented honestly.
399
-
400
- ### SpreadsheetEditor UX Guide
401
-
402
- **Status:** Draft v1
403
-
404
- **Core UX stance**
405
-
406
- - This is a spreadsheet editor, not a rich-text editor in a grid.
407
- - The grid’s semantics (addressing, dependencies, range operations) are first-class.
408
- - UX must surface when the runtime is preserving/locking/warning/blocking/failing.
409
-
410
- **Selection semantics (user-visible)**
411
-
412
- - Active cell + selection range are distinct:
413
- - Active cell: caret focus target (for formula bar and direct typing).
414
- - Selection: rectangular and/or multi-range selection (v1 can restrict to single range; multi-range is an explicit scope add).
415
- - Range operations (insert/delete rows/cols, sort/filter, fill handle, paste) operate on the selection, not on DOM state.
416
-
417
- **Direct editing flows**
418
-
419
- - Typing with a single cell selected enters “cell edit” mode.
420
- - Formula bar shows raw formula text (`<f>`) when present; display layer shows cached or computed value.
421
- - When formula evaluation isn’t supported for a function, UI still shows formula text and cached value (if available), and marks cell as “not locally recalculated” (warn badge).
422
-
423
- **Copy/paste flows**
424
-
425
- - Copy creates a structured clipboard payload (internal JSON) plus plain text/TSV for interoperability.
426
- - Paste dispatches a `PasteRange` command; runtime resolves relative references and updates targets.
427
-
428
- **Preserve-only content UX**
429
-
430
- Examples: charts, pivots, slicers, data model, threaded comments (v1 preserve-only unless fully supported).
431
-
432
- - Preserve-only objects must be visible as “objects” anchored to grid positions when possible.
433
- - Any attempt to edit a preserve-only object returns `lock` (read-only) or `block` (operation unsafe) with explanation.
434
- - “Export compatibility” panel lists preserved objects and any warnings emitted during session.
435
-
436
- **Warnings and blocks**
437
-
438
- - Warnings are non-modal by default but persistent in a session log; host can choose to elevate to modal.
439
- - Blocks are immediate and must explain *why* (e.g., “Row insertion intersects a preserve-only pivot cache mapping; operation blocked to avoid breaking Excel reopen.”).
440
-
441
- **Excel limits UX constraints**
442
-
443
- - UI must prevent selecting beyond max row/col bounds and must not create out-of-range references.
444
- - Pasting content bigger than max rows/cols results in `block` with an actionable message.
445
-
446
- ---
447
-
448
- **File:** `docs/spreadsheet-editor-frontend-architecture.md`
449
- **Purpose:** Describe the browser-side architecture: input system, projection pipeline, rendering, command creation, and event/diagnostics surfaces.
450
-
451
- ### Spreadsheet Editor — Frontend Architecture
452
-
453
- **Status:** Draft v1
454
-
455
- **High-level data flow**
456
-
457
- - DOM events → Input Router → Intent Model → Command Builder → Runtime Dispatch
458
- - Runtime Commit → Event Stream → Projection Selectors → React Render
459
-
460
- **Key modules (frontend)**
461
-
462
- - Input Router
463
- - Normalizes pointer/keyboard events, handles platform differences, IME entry, composition events.
464
- - Intent Model
465
- - Converts low-level events into semantic intents: “select range”, “edit cell”, “drag fill”, “resize column”, “open context menu”.
466
- - Command Builder
467
- - Constructs typed commands from intents, always referencing runtime IDs (sheetId, range, cellRef), never DOM indices.
468
- - Projection Selectors
469
- - Memoized selectors keyed by runtime version and viewport window; compute:
470
- - cell display strings (cached/computed)
471
- - format tokens
472
- - selection overlays
473
- - row/col header state
474
- - Renderer
475
- - Virtualized grid, overlays, and editor subcomponents (formula bar, name box, sheet tabs, panels).
476
-
477
- **Projection contracts**
478
-
479
- - A projection must be reproducible from runtime state; it is disposable.
480
- - Projections must not contain opaque function closures that must be preserved across frames; use IDs and stable handles only.
481
-
482
- **Diagnostics + telemetry**
483
-
484
- - Runtime emits:
485
- - posture events (warn/block/fail)
486
- - performance spans (projection time, commit time)
487
- - compatibility events (normalization happened, preserve-only encountered)
488
-
489
- ---
490
-
491
- **File:** `docs/canonical-workbook-model-and-command-system.md`
492
- **Purpose:** Define the canonical workbook state model, addressing and selection semantics, and the command/transaction/commit architecture (including undo/redo and invariants).
493
-
494
- ### Canonical Workbook Model, Selection Semantics, and Command/Transaction Design
495
-
496
- **Status:** Draft v1
497
-
498
- **Design constraints from OOXML + Excel**
499
-
500
- - Grid scale demands sparse storage and virtualization.
501
- - Formulas and cached results are separate concerns; formulas live in `<f>`, cached value in `<v>`.
502
- - Workbook structure is sheet-driven; workbook references worksheets via relationships.
503
-
504
- **Canonical workbook model (runtime-owned)**
505
-
506
- Key properties:
507
-
508
- - Canonical state must be independent of the source file’s XML layout while still being able to re-emit valid OOXML.
509
- - Canonical state must include a preservation envelope for unknown parts and unmodeled elements.
510
-
511
- Suggested core entities:
512
-
513
- - Document
514
- - docId
515
- - packageGraph (OPC parts + relationships + content types + raw bytes for unknown parts)
516
- - workbook (canonical model)
517
- - diagnostics log
518
- - Workbook
519
- - workbookId
520
- - sheets: ordered list
521
- - definedNames
522
- - calcSettings
523
- - styleTable (canonical)
524
- - Sheet
525
- - sheetId, name
526
- - gridModel (sparse)
527
- - rowColModel (sizes, hidden flags)
528
- - merges
529
- - sheetView (freeze panes, selection, zoom, etc.)
530
- - sheetObjects (preserve-only anchors: charts, slicers, etc.)
531
- - Cell
532
- - address (row, col)
533
- - value (typed)
534
- - formula (optional)
535
- - styleRef
536
- - dataValidationRef (optional; v1 can preserve-only)
537
-
538
- **Sparse grid storage**
539
-
540
- - Use chunked sparse tiles (e.g., Map<tileKey, Tile> where Tile is fixed-size).
541
- - Each Tile stores:
542
- - values map
543
- - formula map
544
- - style indices map
545
- - dirty flags (for projections and recalculation)
546
-
547
- **Selection model**
548
-
549
- - SelectionState
550
- - activeCell (sheetId + address)
551
- - selectionRanges[] (v1: length 1)
552
- - mode: “normal” | “edit” | “formula-entry” | “dragging”
553
- - This is canonical runtime state because export can embed sheet view selection state, and Excel can persist it in sheet view elements.
554
-
555
- **Command / Transaction / Commit**
556
-
557
- - **Command**: user intent, declarative, typed. Examples:
558
- - `SetCellValue(sheetId, addr, newValue)`
559
- - `SetCellFormula(sheetId, addr, formulaText)`
560
- - `InsertRows(sheetId, startRow, count)`
561
- - `InsertCols(sheetId, startCol, count)`
562
- - `DeleteRows(...)`, `DeleteCols(...)`
563
- - `SetRangeStyle(sheetId, range, styleDelta)`
564
- - `MergeCells(sheetId, range)` / `UnmergeCells(...)`
565
- - `RenameSheet(sheetId, newName)`
566
- - **Transaction**: validated, normalized set of operations with explicit invariants and posture results.
567
- - **Commit**: applies transaction atomically, emits events, updates version.
568
-
569
- **Invariant enforcement examples**
570
-
571
- - Prevent out-of-bound writes (rows > 1,048,576; cols > 16,384).
572
- - Prevent operations that would require rewriting preserve-only objects’ internal references unless implemented → `block`.
573
- - If we must normalize derived parts (calcChain), emit `warn`.
574
-
575
- **Undo/redo**
576
-
577
- - Store transaction log with inverse operations:
578
- - Each operation provides `apply()` and `invert()`.
579
- - Undo/redo is runtime-level, not UI-level.
580
-
581
- ---
582
-
583
- **File:** `docs/formula-engine-and-recalc.md`
584
- **Purpose:** Define formula parsing, reference semantics, recalculation strategy, and how to keep reference integrity without pretending to fully replicate Excel.
585
-
586
- ### Formula Engine, Recalculation Strategy, and Reference Integrity for an Excel-Compatible Editor
587
-
588
- **Status:** Draft v1
589
-
590
- **Spec-grounded facts we rely on**
591
-
592
- - Formula text is stored in `<f>` and cached value in `<v>`; cached value can be omitted, and readers can recompute.
593
- - Calculation chain (`calcChain.xml`) can exist but is not required; it records last calculation order and does not dictate runtime calculation order.
594
- - Excel imposes limits on formula length and function semantics in practice.
595
-
596
- **Design stance**
597
-
598
- Do not commit to full Excel parity in v1. Instead:
599
-
600
- - **Always preserve formula text exactly** (including functions we don’t evaluate).
601
- - **Always maintain reference integrity** for supported range operations (copy/paste, insert/delete rows/cols, move range) for the subset of reference grammar we claim to support.
602
- - Evaluation is pluggable and explicitly partial.
603
-
604
- **Formula capabilities taxonomy**
605
-
606
- - **Supported (reference integrity + parse + rewrite):**
607
- - A1 references: `A1`, `$A$1`, `A$1`, `$A1`
608
- - Ranges: `A1:B5`
609
- - Sheet-qualified: `Sheet1!A1`
610
- - 3D references (v1 preserve-only unless implemented)
611
- - Structured references (tables): preserve-only in v1 unless table engine implemented; grammar exists and is non-trivial.
612
- - **Supported evaluation (v1 optional):** limited function set (SUM, AVERAGE, MIN/MAX, IF, basic arithmetic), with clear “unsupported function” behavior.
613
- - **Preserve-only:** dynamic arrays, rich value functions, new/copilot-related functions, external code service functions; preserve text and cached result.
614
-
615
- **Recalculation modes**
616
-
617
- - Mode 0 (Display cached): show cached `<v>` values where present.
618
- - Pros: faithful to file state; minimal complexity.
619
- - Cons: edits don’t update dependent cells visually.
620
- - Mode 1 (Incremental partial): evaluate only supported formula subset; mark others as “not locally recalculated.”
621
- - Mode 2 (Full engine): out of v1 scope.
622
-
623
- **Reference rewrite strategy**
624
-
625
- - Parse formula into AST with tokens preserving original string slices.
626
- - Reference nodes carry:
627
- - kind (cell/range/structured/name)
628
- - absolute flags
629
- - sheet scope
630
- - Range operations produce a “reference transform” mapping and rewrite AST accordingly.
631
-
632
- **calcChain policy**
633
-
634
- - If we can maintain calcChain consistently, preserve.
635
- - If operations invalidate calcChain and we cannot update it safely, remove it and emit `warn`, relying on Excel to rebuild (allowed because calcChain is optional and does not define dependencies).
636
-
637
- ---
638
-
639
- **File:** `docs/review-comment-diff-model.md`
640
- **Purpose:** Define how comments (legacy and threaded), diffing, and change inspection work, with honest v1 scope and preserve-only posture for complex Excel collaboration features.
641
-
642
- ### Review, Comment, Diff, and Change-Inspection Model for an Excel-Compatible Editor
643
-
644
- **Status:** Draft v1
645
-
646
- **Key reality**
647
-
648
- Excel has multiple comment systems and collaboration metadata:
649
-
650
- - Legacy comments are defined in ISO/IEC 29500 (referenced by MS-XLSX).
651
- - Threaded comments are specified as an extension with associated parts, persons, mentions, and compatibility placeholders; reconciliation behavior is described in MS-XLSX.
652
-
653
- **v1 stance**
654
-
655
- - Legacy comments: preserve-only (visible if we can anchor to cell; editing optional).
656
- - Threaded comments/persons/mentions: preserve-only in v1 unless we implement the full multi-part invariants:
657
- - Threaded Comments part presence implies at least one threaded comment; part has a specific content type and relationship.
658
- - Persons and mentions have required ID correspondence rules.
659
- - Legacy placeholders must align with threaded comments for backward compatibility.
660
-
661
- **Diff model (editor-internal, not Excel track changes)**
662
-
663
- We implement an internal, deterministic diff for:
664
-
665
- - Workbook structure changes (sheets added/removed/renamed/reordered)
666
- - Range edits (cells changed, formulas changed, formats changed)
667
- - Named range edits
668
-
669
- Diff representation:
670
-
671
- - Based on committed transactions, not on UI events.
672
- - Each transaction includes “semantic change entries”:
673
- - `CellValueChanged`, `CellFormulaChanged`, `RangeShifted`, `StyleChanged`, etc.
674
-
675
- **Change inspection UI**
676
-
677
- - A “Changes” panel lists transactions with:
678
- - author (host-provided)
679
- - time
680
- - affected ranges
681
- - posture warnings
682
- - Clicking a change navigates to affected range and highlights before/after.
683
-
684
- **Preserve-only collision rules**
685
-
686
- If the user edits a range that intersects preserve-only objects anchored to those cells:
687
-
688
- - Default: `block` unless we can prove safe rewrite of the preserve-only object references.
689
- - Alternative: `warn` and proceed only if we can guarantee object remains valid and Excel opens. (This requires fixtures; do not do in v1 by default.)
690
-
691
- ---
692
-
693
- **File:** `docs/performance-strategy-main-thread.md`
694
- **Purpose:** Provide a performance plan that works on the main thread, with explicit budgets, data structures, and regression gates.
695
-
696
- ### Performance Strategy for a Main-Thread Excel-Compatible Spreadsheet Editor
697
-
698
- **Status:** Draft v1
699
-
700
- **Constraints**
701
-
702
- - Excel scale: grid bounds are huge; we must virtualize and avoid full materialization.
703
- - JavaScript main-thread: avoid long tasks; projection must be incremental and tile-based.
704
-
705
- **Performance budgets (targets)**
706
-
707
- - Input latency:
708
- - typing to cell display update: < 16ms average
709
- - selection movement: < 8ms average
710
- - Scroll: maintain 60fps under typical viewport sizes
711
- - Large file load (e.g., 10MB workbook): usable first paint in < 1s on modern laptop (stretch goal; dependent on parsing strategy)
712
-
713
- **Core techniques**
714
-
715
- - Tile-based sparse grid and tile-based projection cache (64×64 or 128×32).
716
- - Incremental XML parsing: parse packages and worksheets on demand (sheet-level lazy load).
717
- - Avoid allocating per-cell objects for empty cells.
718
- - String interning and shared string handling must be memory-aware; Excel uses shared strings to optimize repeated strings.
719
- - Commit batching: multiple UI micro-events coalesce into one transaction per user action when possible.
720
-
721
- **Regression gates**
722
-
723
- - Performance benchmarks in CI: load fixtures, simulate scroll, simulate 10k cell edits, record long tasks.
724
- - Fail build if median exceeds targets by threshold.
725
-
726
- ---
727
-
728
- **File:** `docs/xlsx-fixture-corpus-and-certification-plan.md`
729
- **Purpose:** Define the fixture corpus, scenario program, and the certification process (CI + nightly + release) for Excel reopen safety.
730
-
731
- ### XLSX Fixture Corpus, Scenario Program, and Certification Plan
732
-
733
- **Status:** Draft v1
734
-
735
- **Fixture corpus structure**
736
-
737
- - `fixtures/input/`
738
- - `minimal/` (minimum workbook, one sheet, basic cells)
739
- - `strings/` (shared strings, inline strings, rich text in shared string items)
740
- - `formulas/` (simple formulas, references, cross-sheet references; cached values present/absent)
741
- - `calcchain/` (with/without calcChain; broken calcChain cases)
742
- - `styles/` (num formats, fonts/fills/borders; many styles; edge counts)
743
- - `objects-preserve-only/` (charts, pivots, slicers, named sheet views, threaded comments, rich values)
744
- - `encrypted/` (encrypted package samples → must fail)
745
-
746
- **Scenario program**
747
-
748
- Each scenario is a deterministic script:
749
-
750
- - Load fixture
751
- - Apply commands
752
- - Export
753
- - Run validators
754
- - Run Excel automation open/reopen on nightly/release tiers
755
-
756
- Example scenarios:
757
-
758
- - `no-op round trip` for every fixture
759
- - `edit cells + undo/redo`
760
- - `insert rows/cols`, `delete rows/cols`
761
- - `copy/paste range`
762
- - `sheet rename/reorder`
763
- - `format range`
764
- - `formula rewrite on insert row`
765
-
766
- **Certification outcomes**
767
-
768
- - **Pass**: Excel opens without repair; supported changes preserved; preserve-only parts preserved.
769
- - **Warn-pass**: Excel opens and supported changes preserved, but a documented normalization happened (e.g., calcChain dropped).
770
- - **Fail**: repair prompt or supported loss or structural invalidity.
771
-
772
- ---
773
-
774
- **File:** `docs/shared-openxml-editor-platform.md`
775
- **Purpose:** Define the shared platform modules and contracts reused across DOCX and XLSX editors (OPC package graph, markup compatibility, command/transaction framework, preservation envelope).
776
-
777
- ### Shared OpenXML Editor Platform for DOCX and XLSX
778
-
779
- **Status:** Draft v1
780
-
781
- **Shared platform responsibilities**
782
-
783
- - OPC Package Graph abstraction
784
- - parts (URI, content type, raw bytes, parsed trees where relevant)
785
- - relationships (package/part relationships; internal/external)
786
- - content types (`[Content_Types].xml`) management
787
- - Preservation Envelope
788
- - store unknown parts + unknown XML payloads as raw bytes
789
- - preserve relationship graph even when content is not understood
790
- - Markup compatibility utilities
791
- - preserve unknown namespaces and extension lists
792
- - do not drop `extLst`-style future feature payloads
793
- - Command/Transaction framework
794
- - typed commands
795
- - validation and posture results
796
- - transaction log + undo/redo + diff
797
-
798
- **Shared contracts**
799
-
800
- - `IOoxmlPackageGraph`
801
- - `IPreservationStore`
802
- - `ICommandBus` / `ITransactionEngine`
803
- - `IPosturePolicy` (host-configurable)
804
-
805
- **Preservation rules (shared)**
806
-
807
- - Never silently drop unknown parts.
808
- - Never silently drop unknown relationship types.
809
- - If we must normalize a derived artifact, we do it explicitly with posture `warn` and fixture coverage.
810
-
811
- ---
812
-
813
- **File:** `docs/agent-llm-interaction-layer.md`
814
- **Purpose:** Specify a safe “agent interface” for both DOCX and XLSX editors: bounded command generation, explainable diffs, and posture-aware tool use.
815
-
816
- ### Agent / LLM Interaction Layer for DOCX and XLSX Editors
817
-
818
- **Status:** Draft v1
819
-
820
- **Principles**
821
-
822
- - The agent does not mutate state directly. It proposes commands.
823
- - Every command is validated by runtime; posture outcomes must be returned to the agent.
824
- - The agent must be able to explain what changed and why something was blocked.
825
-
826
- **Core abstractions**
827
-
828
- - `EditorAgentSession`
829
- - has a runtime handle
830
- - can request projections (read-only)
831
- - can propose a command batch
832
- - `AgentCommandPlan`
833
- - list of commands
834
- - expected outcomes (optional)
835
- - rollback strategy
836
-
837
- **Security + safety constraints**
838
-
839
- - No arbitrary code execution in formulas or macros via agent.
840
- - For encrypted/protected files, agent must receive `fail` and can only advise user on next steps (e.g., decrypt outside the editor).
841
-
842
- **Agent-facing schemas**
843
-
844
- - Workbook summary
845
- - Sheet projection (viewport)
846
- - Cell inspection (raw stored value, formula text, style tokens)
847
- - Diagnostics log (warnings, preserve-only objects)
848
-
849
- **Example agent flow**
850
-
851
- 1) Agent requests visible viewport projection.
852
- 2) Agent proposes commands: set values, set formulas, format a range.
853
- 3) Runtime returns {ok, posture, transactionId}.
854
- 4) Agent requests diff summary for transaction; explains to user.
855
- 5) If blocked, agent suggests alternative (e.g., edit a different range, or accept preserve-only lock).
856
-
857
- ---
858
-
859
- ## Sources
860
-
861
- - OPC relationships and packaging fundamentals (relationships as links from package or part; target modes; relationship markup).
862
- - Microsoft MSDN Magazine on OPC: `[Content_Types].xml`, `/_rels/.rels`, relationship serialization examples.
863
- - Microsoft Learn: Structure of a SpreadsheetML document (minimum workbook scenario; workbook.xml, workbook rels, worksheet parts).
864
- - Microsoft Learn: Working with sheets (worksheet part semantics; statement that a package contains one worksheet part per worksheet).
865
- - Microsoft Learn: Shared string table (sharedStrings part; “Excel always creates a shared string table when it saves a file”; optionality).
866
- - Microsoft Learn: Working with formulas (`<f>` for formula, `<v>` cached value; cached value can be omitted).
867
- - Microsoft Learn: Working with the calculation chain (calcChain optionality; at most one; semantics).
868
- - Open XML SDK reference: SpreadsheetDocument class (package/part model; relationship traversal tools; calc chain ignore helper).
869
- - Microsoft Support: Excel specifications and limits (grid size, cell text limits, formula length limits, style limits).
870
- - Microsoft Open Specifications PDF: MS-XLSX (Excel `.xlsx` extensions; threaded comments/persons/mentions; named sheet views; rich values and “unknown rich value MUST be preserved”; slicers).
871
- - Microsoft Open Specifications: Office Document Cryptography Structure (EncryptedPackage contains entire ECMA-376 source file in compressed encrypted form; EncryptionInfo stream details).