@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,228 +0,0 @@
1
- # Shared OpenXML Editor Platform for DOCX and XLSX
2
-
3
- This research paper is source material.
4
-
5
- Canonical repo-aligned platform doc:
6
-
7
- - `docs/architecture/platform/shared-openxml-editor-platform.md`
8
-
9
- ## Interpretation of the problem
10
-
11
- You already have a React-based Word-compatible DOCX editor whose core posture is “package-first, runtime-owned truth, command→transaction→commit, and never silently drop preservable content.” That posture is explicitly documented in your repo’s OOXML compliance model and public API contracts.
12
-
13
- The ask is to design an XLSX sibling with the same architectural rigor, without pretending spreadsheets are “rich text + cells,” and to define a shared platform layer that both vertical editors can build on without forcing fake abstraction. The platform must treat `.docx`/`.xlsx` as OOXML packages under Open Packaging Conventions (OPC), preserve unsupported-but-preservable content, and keep host application behavior (Word/Excel reopen-without-repair-prompts) as the ultimate acceptance gate.
14
-
15
- This memo therefore focuses on: extracting genuinely shared OPC/package/preservation/validation/session scaffolding; aligning the public API philosophy and trust/health model; and drawing hard boundaries around what must remain DOCX-specific vs XLSX-specific (canonical schema, editing primitives, selection model, review semantics, and surface rendering).
16
-
17
- ## Research plan
18
-
19
- The research work followed three lanes, with connector-first priority:
20
-
21
- First, I inspected the existing architecture and contracts in `bwllaming/docx-react-component`, concentrating on the pieces that already look “platform-like”: OPC package IO (`src/io/opc/*`), part/relationship modeling (`src/io/ooxml/part-manifest.ts`), export sessions and preserved-part reattachment (`src/io/export/*`), preservation stores and markup compatibility handling (`src/preservation/*`), the diagnostics taxonomy (`src/validation/*` + `docs/reference/ooxml-compliance.md`), the runtime command/transaction spine (`src/core/commands/*` + `src/runtime/*`), the published public API (`docs/reference/public-api.md`), and the React shell contract (“UI is a projection of runtime state”).
22
-
23
- Second, I anchored the platform requirements in primary standards references for OOXML packaging and markup compatibility: the OOXML family as published by (ECMA-376) and the ISO/IEC 29500 series published under and. Because the platform is about packaging/preservation invariants, the key normative anchors are “OPC exists and is the packaging model” and “MCE defines forward-compatible markup handling.”
24
-
25
- Third, I separated “spec-level correctness” from “host-level correctness” by incorporating’s own guidance on Open XML formats and Excel repair behavior, plus the Open XML SDK validation surface used in your repo (and documented as “necessary but not sufficient”).
26
-
27
- ## Findings
28
-
29
- Your Word editor already contains a surprisingly complete “shared platform” nucleus, even though it lives inside a DOCX vertical today.
30
-
31
- At the UI contract level, the repo is explicit that React does not own canonical document truth: UI components render from a runtime-provided snapshot (`RuntimeRenderSnapshot`) via `useSyncExternalStore`, and mutation never happens by “editing the DOM and hoping state follows.” Instead, mutation flows through runtime callbacks that dispatch commands.
32
-
33
- At the runtime level, commands are a discriminated union (`EditorCommand`) executed into an `EditorTransaction` that carries `nextState`, mapping info, effects, and explicit history boundaries (“push” vs “skip”). That is the exact “commands → transactions → commit” spine you want to preserve across both DOCX and XLSX; the mechanics are shareable even if the domain command set is not.
34
-
35
- The trust/health posture is also already formalized. Your repo’s `SessionCapabilities` are derived purely from runtime state (not component-local copies), and include explicit “exportBlocked”, “preserveOnlyCount”, and “unsupportedFatalCount” surfaces that drive UI behavior (e.g., rail visibility and export enablement). This is a cross-vertical platform concern, not a DOCX-only one.
36
-
37
- On the file-format side, the repo treats `.docx` as an OPC package and implements its own package reader/writer, export-session rewriting, and preserved-part reattachment. The export design is structurally platform-grade: an `ExportSession` declares “owned output paths,” forbids owning reserved manifest paths, rewrites only what is owned, then reattaches all non-owned “content” parts from the source package (including package-level relationships).
38
-
39
- The DOCX vertical session (`loadDocxEditorSession`) demonstrates the target platform shape for any OOXML editor: read bytes → parse OPC → fail closed on malformed package or broken relationships → import owned parts into canonical runtime state → register non-owned parts into preservation → produce a snapshot and a compatibility report → export by rewriting owned parts into an export session.
40
-
41
- Most importantly for “never drop preservable content,” your compliance model is explicit: every feature must be classified as `supported-roundtrip`, `preserve-only`, or `unsupported-fatal`, and “supported-import-only / supported-export-only” are explicitly rejected as dishonest categories. That taxonomy is already enforced in the diagnostics layer and surfaced in runtime health.
42
-
43
- The response model is also already named and operational: preserve, lock, warn, block, fail. This gives a shared vocabulary for user experience and for export gating decisions across DOCX and XLSX.
44
-
45
- For forward-compatibility markup handling, the repo has dedicated markup-compatibility handling that extracts and preserves root-level markup compatibility attributes (e.g., `xmlns:mc`, `mc:Ignorable`, and related namespace declarations) rather than letting serialization accidentally strip them. That’s directly portable as a platform concern, even if the exact root element differs between Word and Spreadsheet parts.
46
-
47
- Your tests demonstrate that preservation isn’t aspirational; it’s asserted. The fixture-style tests explicitly prove that unknown/preserved parts survive export byte-for-byte, that `mc:Ignorable` survives, and that broken relationship targets fail closed with export blocked. This fixture program is exactly the pattern an XLSX sibling will need, with Excel reopen behavior as the gate.
48
-
49
- Finally, the repo already integrates Open XML SDK validation as a separate service/CI tool rather than a browser runtime dependency. The OOXML compliance doc explicitly says SDK validation is necessary but not sufficient, and your validator service uses `OpenXmlValidator` to validate a package and emits schema findings. That architecture is inherently shareable and should become a platform capability for both DOCX and XLSX.
50
-
51
- From standards and host behavior sources: OOXML’s packaging model and markup compatibility model are standardized under ECMA-376 / ISO/IEC 29500, so “treat `.xlsx` as a package with parts + relationships + content types” is the normative stance, not a design preference. Meanwhile, Excel explicitly has corruption detection and repair flows (automatic recovery and “Open and Repair”), so the platform has to assume that export correctness is judged by whether the host detects corruption and repairs (which can be destructive), not by whether your code “successfully wrote a ZIP.” And Microsoft’s Open XML format guidance distinguishes `.xlsx` (no macros) from macro-enabled formats (e.g., `.xlsm`), which directly impacts what a “spreadsheet editor” can safely claim as in-scope for import/edit/export without silent loss.
52
-
53
- ## Recommended design / decisions
54
-
55
- The core decision is to elevate the pieces that are truly format-agnostic (OPC mechanics, preservation plumbing, diagnostics taxonomy, session lifecycle scaffolding, validation harnessing, and host-facing API philosophy) into a shared “OpenXML Editor Platform,” while explicitly refusing to unify DOCX and XLSX at the canonical-schema and editing-primitive layers.
56
-
57
- The platform should be defined as a set of *capabilities* with narrow, typed contracts, not a single “OpenXmlEditorBase” class that both verticals subclass. Your repo already demonstrates the right posture: shared invariants are encoded in stand-alone modules (e.g., diagnostics taxonomy, export sessions, preserved-part reattachment), and vertical code composes them.
58
-
59
- Platform modules that should be shared between DOCX and XLSX:
60
-
61
- Package/OPC core: everything needed to parse and emit a correct OPC package and to reason about parts and relationships should be shared. In your repo, that includes the package reader/writer (ZIP + content types + rels), the part-manifest modeling, relationship target resolution, and the “reserved-path” discipline in export sessions. Even if XLSX ultimately needs additional ZIP features (compression choices, streaming), the invariants and APIs should stay common.
62
-
63
- Preservation plumbing: “reattach all non-owned content parts and package relationships” is not DOCX-specific. It is the platform mechanism that makes “unsupported but preservable content must never be silently dropped” implementable. The DOCX code already does this at the package boundary, and tests lock it in. XLSX will need the same mechanism because spreadsheets have even more peripheral parts (drawings, charts, pivot caches, external connections) that you will likely classify preserve-only early on.
64
-
65
- Diagnostics + compatibility taxonomy: the tri-class model (`supported-roundtrip`, `preserve-only`, `unsupported-fatal`) and the export-blocking logic based on “unsupported-fatal or fatal errors” is already implemented and already used by runtime health surfaces. This belongs in the shared platform as the common language for both editors. DOCX and XLSX can (and will) define different feature keys and different classifiers, but the taxonomy and export-block semantics should be shared so hosts see a consistent trust posture across document types.
66
-
67
- Session lifecycle scaffolding (import → runtime → export): your DOCX session loader has a clear structure: package read, structural safety checks (broken relationships), owned-part import, preservation registration, compatibility report, and export function that rewrites owned parts only if export is not blocked. This skeleton should be extracted as a platform “session kernel” that DOCX and XLSX implement by providing (a) their owned-part set, (b) their import parser/normalizer, and (c) their export serializer.
68
-
69
- Markup compatibility preservation: preserving markup compatibility attributes is a format-agnostic need, but the *filtering rules* are not. The platform should provide generic utilities (“extract root attributes”, “preserve MCE attributes”), while each vertical supplies (a) its root element name(s) and (b) the namespace prefixes it must preserve for safe round-tripping. Your current `filterMarkupCompatibilityAttributes` is Word-root oriented; XLSX must similarly preserve workbook/sheet-level `mc:*` and any ignorable namespaces it encounters.
70
-
71
- Read-only diagnostics mode: “fail closed into diagnostics/read-only mode with export blocked” is explicitly part of your compliance contract. This should be a platform capability with a shared runtime interface contract so both editors can surface “this package cannot be safely rewritten” in a consistent, host-friendly way.
72
-
73
- Autosave and snapshot contract philosophy: the host-facing persistence model (persist snapshots as JSON checkpoints; manual export checkpoints must save snapshot first; autosave must be debounced and scoped to revision tokens) is not DOCX-only. It’s a platform-level host contract that should remain aligned between editors to avoid “one editor loses work differently than the other.”
74
-
75
- Validation harnessing (not runtime): the Open XML SDK validator service should be generalized to validate both Wordprocessing and Spreadsheet packages (and ideally accept `.docx`, `.xlsx`, `.pptx` with explicit gates). The platform should standardize the CI/API integration shape: “package inspection + SDK validation findings + stable tokens for diagnostics,” while keeping it out of the browser bundle.
76
-
77
- What must remain document-type-specific (do not share, by design):
78
-
79
- Canonical schema: your DOCX `CanonicalDocument` is a linearized story model with review + preservation fields. XLSX needs a workbook model (sheets, cells, shared strings, styles, formula graph, defined names, calc settings). Sharing a canonical schema here will produce “fake abstraction” and break spreadsheet-first correctness.
80
-
81
- Editing primitives: DOCX operations are text/paragraph-centric (insert text, split paragraph, etc.). XLSX primitives are grid-centric (edit cell value, fill, cut/paste ranges, insert rows/cols, adjust formulas, recalc dependencies). Forcing shared primitives would either cripple XLSX or contaminate DOCX with irrelevant complexity.
82
-
83
- Selection model: DOCX currently uses a flat range/node/detached anchor projection model. XLSX needs 2D selections (cell, range, multi-range, entire row/column, sheet selection), plus active cell vs selection range semantics. This must be vertical-specific, though the *pattern* “selection is runtime-owned and projected to UI” remains shared.
84
-
85
- Review semantics and provenance: Word tracked changes and comment anchoring are structurally different from spreadsheet change tracking/comment models and will diverge even more once formulas and structural operations exist. Treat review as a vertical capability with a shared trust/taxonomy surface.
86
-
87
- Surface rendering: Word’s “button-per-character” rendering stack is intentionally specialized. A spreadsheet must use virtualization, grid rendering, editing overlays, and significantly different interaction mechanics. Share only the outer shell concepts (runtime snapshot projection, eventing), not the renderer.
88
-
89
- Public API philosophy should stay aligned without forcing fake abstraction:
90
-
91
- Your current public API has strong, repeatable principles: uncontrolled-by-default; narrow controlled reload via `externalDocumentRevision` + `externalDocSource`; ref is a thin wrapper over runtime (no DOM exposing, no mutable canonical state); and trust/health is explicit via compatibility reports, warnings, and errors. That philosophy should become a platform “API doctrine,” with separate `WordReviewEditor` and `SpreadsheetEditor` components that expose symmetric (not identical) surfaces: `exportDocx` vs `exportXlsx`, DOCX-specific ref methods vs XLSX-specific ones.
92
-
93
- The platform should standardize shared host-facing types where they are genuinely common: `PersistedEditorSnapshot` pattern, `CompatibilityReport`, `EditorWarning`, `EditorError`, event stream patterns, autosave config and datastore adapter interface. Then each vertical adds its own specialized snapshot payload and ref commands. This prevents API drift while still being honest about domain differences.
94
-
95
- ## Risks and open questions
96
-
97
- Over-sharing risks: The biggest risk is building a “shared” canonical model or selection abstraction that encodes Word’s linear text assumptions and then trying to retrofit spreadsheets into it. This will either (a) force spreadsheets into a degenerate “text grid” model that can’t correctly handle formulas, range operations, and recalculation, or (b) pollute the shared layer with conditionals until the platform becomes unmaintainable. Your own repo already warns against silent scope widening (e.g., tables require explicit contract revisions). The XLSX sibling needs the same discipline.
98
-
99
- Under-sharing risks: Duplicating OPC/package/preservation logic across DOCX and XLSX will almost certainly diverge over time and create inconsistent trust outcomes: one editor preserves unknown parts, the other silently drops; one blocks export on broken relationships, the other “best-efforts” and causes host repair prompts. Given Excel’s repair mechanisms, divergence here will show up as user-visible corruption/repair flows.
100
-
101
- Standards-access and exact normative deltas: ECMA-376 / ISO/IEC 29500 define the packaging and MCE rules, but host behavior includes undocumented heuristics and extension points. The open question for the XLSX vertical is: which OOXML extension namespaces and parts must be preserved *exactly* for safe reopen, and which can be normalized without triggering Excel repair flows? The platform should assume “preserve by default; rewrite only owned parts,” but XLSX has more parts that Excel treats as coupled (e.g., calc artifacts, shared strings, styles). This implies an early conservative scope: preserve-only for many features until proven safe with Excel reopen tests.
102
-
103
- Macro-enabled and encrypted containers: Microsoft’s own guidance distinguishes macro-free `.xlsx` from macro-enabled formats (e.g., `.xlsm`). If XLSX editing is in-scope, macro preservation and VBA project parts are out-of-scope unless you explicitly support `.xlsm` and can preserve those parts without rewriting hazards. Your DOCX API already excludes encrypted/password-to-open intake as a host responsibility; XLSX should follow the same posture unless you explicitly expand it.
104
-
105
- Validation sufficiency: Open XML SDK validation is a schema-level check. It is necessary but does not guarantee Excel/Word won’t repair or reinterpret content. The platform must keep a two-tier gate: schema validation (SDK) plus host reopen certification (Excel/Word).
106
-
107
- ## Concrete deliverable in the requested format
108
-
109
- Decision-ready architecture memo with recommended extraction order:
110
-
111
- Proposed repo/module boundaries (target end state)
112
-
113
- A two-vertical layout with an explicit platform layer:
114
-
115
- ```text
116
- packages/
117
- openxml-platform/
118
- opc/
119
- package-reader.ts
120
- package-writer.ts
121
- part-manifest.ts
122
- corrupt-package.ts # generalized, not "docx"-named
123
- preservation/
124
- preservation-store.ts # generic structures + vertical classifiers
125
- markup-compatibility.ts # generic root-attr extraction + MCE helpers
126
- preserved-parts.ts # capture + reattach mechanisms
127
- session/
128
- session-kernel.ts # lifecycle scaffolding + safety checks
129
- export-session.ts # owned-part rewrite discipline
130
- import-diagnostics.ts # fail-closed diagnostics mode contract
131
- read-only-diagnostics-runtime.ts
132
- diagnostics/
133
- diagnostics.ts # feature classes, warn/error taxonomy, export block rules
134
- compatibility-report.ts # generic report builder scaffolding
135
- validation/
136
- openxml-validator-client.ts # calls validator service
137
- validation-fixture-runner.ts # CI harness hooks
138
- host/
139
- datastore-adapter.ts # shared persistence contract
140
- autosave.ts # shared debounce + revision-token scoping logic
141
- events.ts # shared event envelope patterns
142
-
143
- docx-editor/
144
- docx-session.ts # DOCX-owned parts import/export
145
- docx-canonical-schema/ # Word canonical model
146
- docx-runtime/ # Word commands, mapping, review semantics
147
- docx-ui/ # Word renderer + review workspace
148
-
149
- xlsx-editor/
150
- xlsx-session.ts # XLSX-owned parts import/export
151
- xlsx-canonical-schema/ # Workbook canonical model
152
- xlsx-runtime/ # Grid commands, selection, recalculation strategy
153
- xlsx-ui/ # Virtualized grid renderer
154
- services/
155
- openxml-validator/
156
- Program.cs # extended to accept .xlsx and run OpenXmlValidator
157
- ```
158
-
159
- Why these boundaries are honest:
160
-
161
- The platform layer contains only what is truly package/session/trust infrastructure: OPC mechanics, preserved part survival, diagnostics taxonomy, session lifecycle, autosave/snapshot scaffolding, and validation harnessing. This directly aligns with the repo’s existing “package-first rules” and “preserve/lock/warn/block/fail” posture and keeps the “host behavior is final standard” gate enforceable.
162
-
163
- The vertical layers own canonical schema and editing semantics, because attempting to share those would violate the explicit requirement that spreadsheets not be treated as rich text, and because your current architecture already treats schema expansion as requiring explicit contract revision.
164
-
165
- Platform extraction order (recommended sequence)
166
-
167
- First extraction: OPC + export-session + preserved-part reattachment
168
- Move `ExportSession` and `reattachPreservedParts` (and their supporting part/relationship utilities) into `openxml-platform/session` and `openxml-platform/opc`. These modules are already format-agnostic and have strong invariant checks (“cannot own reserved manifest paths,” “cannot rewrite non-owned paths”). This extraction is low-risk and unlocks XLSX immediately because XLSX must be package-first from day one.
169
-
170
- Second extraction: diagnostics taxonomy + import diagnostics + read-only diagnostics runtime
171
- Move `diagnostics.ts` and `import-diagnostics.ts` into `openxml-platform/diagnostics` and `openxml-platform/session`. These are already generic and underpin the cross-vertical response model (preserve/lock/warn/block/fail) and export blocking rules. This allows the XLSX editor to share a consistent trust model from its first non-trivial fixture import.
172
-
173
- Third extraction: markup-compatibility utilities as configurable platform primitives
174
- Move `extractDocumentRootAttributes` and the generic filtering helpers into a platform module, but refactor the filter to accept a vertical-provided allowlist/predicate rather than hardcoding Word namespace prefixes. This prevents Word-specific “xmlns:w14” concerns from bleeding into spreadsheets while preserving the shared MCE intent.
175
-
176
- Fourth extraction: host persistence + autosave scaffolding (shell logic)
177
- Extract datastore adapter types and autosave logic into the platform host module so both components share the same persistence semantics (save snapshot before export checkpoint; autosave keyed by revision token; failures surfaced via events). Then keep DOCX- or XLSX-specific UI surfaces out of that module.
178
-
179
- Fifth extraction: validator service generalization
180
- Extend the Open XML SDK validator service to accept `.xlsx` and validate with `OpenXmlValidator` over `SpreadsheetDocument` (parallel to current WordprocessingDocument validation). Keep it off the browser runtime path. The platform should define a stable response schema that both editors can consume for CI gating and diagnostics enrichment.
181
-
182
- Sixth step: build XLSX as a first-class vertical using only platform primitives
183
- Only after the platform primitives above exist should you start the XLSX work as a true sibling: implement `xlsx-session.ts` by declaring owned parts conservatively, and launch with a fixture corpus that proves (a) package integrity, (b) preserved-part survival, (c) Excel reopen-no-repair on “no-op export,” and (d) “minimal supported-roundtrip edit” (e.g., edit a cell value) without losing preservable content. Excel’s own repair behavior is the acceptance bar, not “we can parse and write XML.”
184
-
185
- Shared platform API doctrine (what stays aligned)
186
-
187
- Uncontrolled-by-default, narrow controlled reload: keep the pattern “host provides initial source once; host can replace document only via explicit revision token + external source.” This is already codified for DOCX and should be repeated for XLSX without inventing a shared “OpenXmlEditor” prop surface that hides important differences (`exportDocx` vs `exportXlsx`).
188
-
189
- Runtime-owned truth, UI as projection: keep the runtime snapshot pattern and session capabilities derivation pattern across both editors. Your repo already encodes and documents these rules clearly; they belong in the platform doctrine and lint/test gates.
190
-
191
- Trust/health surfaces: keep `CompatibilityReport` + warning/error model consistent across verticals, so hosts don’t need two different “what does blocked export mean” implementations. The feature keys will differ, but the classes and gating semantics should not.
192
-
193
- Release gates (platform + vertical)
194
-
195
- Platform gates (must pass before XLSX ships a “v1 edit”): preserved-part survival tests analogous to current DOCX fixtures; fail-closed behavior on broken internal relationships; manifest/content-type correctness; and validator service clean runs.
196
-
197
- XLSX vertical gates (minimum honest scope): Excel reopen without repair prompts is the primary gate; schema validation is secondary/necessary. Microsoft explicitly documents repair mechanics when corruption is detected, so triggering repair is treated as a failure unless explicitly accepted as a preserve-only/unsupported-fatal outcome.
198
-
199
- ## Sources
200
-
201
- Internal (GitHub connector: `bwllaming/docx-react-component`)
202
-
203
- Public API doctrine and host contract:
204
- Frontend architecture rules (“UI is projection of runtime snapshot”):
205
- OOXML compliance model and taxonomy:
206
- Command → transaction execution spine:
207
- Session capabilities / trust surfaces:
208
- DOCX session import/export structure:
209
- Export session + owned-part rewrite discipline:
210
- Preserved-part reattachment mechanics:
211
- Import diagnostics fail-closed mode:
212
- Diagnostics taxonomy + export blocking semantics:
213
- Markup-compatibility attribute preservation:
214
- Preservation roundtrip tests (unknown parts, AlternateContent, broken rels):
215
- Open XML SDK validator service implementation:
216
-
217
- External standards and official documentation
218
-
219
- OOXML standard family and parts listing (ECMA-376):
220
- ISO/IEC 29500-2 (OPC) listing:
221
- ISO/IEC 29500-3 (Markup Compatibility and Extensibility) listing:
222
- Library overview and links for MCE/OOXML (helpful cross-reference):
223
-
224
- Excel repair behavior (host-level correctness implications):
225
- Microsoft Open XML format extensions (.docx/.xlsx/.pptx and macro-enabled suffixes):
226
-
227
- Open XML SDK validation surface (`OpenXmlValidator`):
228
- Open XML SDK `SpreadsheetDocument.Open` API surface (used for XLSX validation patterns):