@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,219 +0,0 @@
1
- # Feature Compatibility Matrix for a React Word Compatible Legal Editor v1
2
-
3
- ## Support philosophy and integrity contract
4
-
5
- This v1 editor is engineered for **legal review workflows** (contracts, pleadings, deal docs, redlines, comment-based review), not for full Microsoft Word feature parity. The guiding rule is **“roundtrip integrity over rendering fidelity”**: exported `.docx` must reopen in modern Word without repair dialogs and without structural damage, even if the on-screen layout in the browser is simplified. citeturn15search3turn15search13turn10search3
6
-
7
- The interoperability contract is based on these WordprocessingML realities:
8
-
9
- - A Word document body is fundamentally **block structures** (e.g., paragraphs and tables) where a paragraph (`w:p`) contains runs (`w:r`) and text (`w:t`), plus annotations like comments and revisions. citeturn6search3turn4search7turn13search0turn16search1
10
- - Critical legal review constructs (comments, tracked changes, numbering, tables) are represented as **specific OOXML elements and parts** (e.g., `comments.xml`, `commentsExtended.xml`, `numbering.xml`, headers/footers parts). citeturn9search17turn11search7turn7search17turn3search2
11
- - “Unknown” or out-of-scope OOXML is commonly carried using **markup compatibility and extensibility** (e.g., `mc:AlternateContent`, ignorable namespaces). A conformant producer must avoid destroying semantics it does not understand. citeturn15search0turn15search5turn15search1
12
-
13
- Accordingly, v1 uses four operational principles:
14
-
15
- 1. **Supported features are normalized into an internal schema** and can be edited safely and serialized back to OOXML with deterministic behavior.
16
- 2. **Preserve-only features are retained byte-for-byte** (or as faithful XML subtrees) and re-emitted, but editing is intentionally constrained to prevent corruption.
17
- 3. **Import-only features are visually flattened** for reading but are not emitted as the same OOXML feature on export (used sparingly in v1 because legal workflows demand roundtrip).
18
- 4. **Unsupported-fatal conditions block save/export** (or force read-only mode) when v1 cannot guarantee Word-safe output.
19
-
20
- ## Matrix definitions and processing rules
21
-
22
- ### Support classes
23
-
24
- - **supported-roundtrip**: imported into editor model (or safely preserved), edits are safe per the rules below, export is Word-safe, and Word reopens feature intact (or with stated, bounded simplifications).
25
- - **supported-import-only**: imported for display; editing/export does not fully preserve the semantic feature.
26
- - **supported-export-only**: feature can be created on export but not reliably parsed from arbitrary input.
27
- - **preserve-only**: imported and re-emitted without semantic understanding; editing is locked or restricted to prevent damaging the preserved XML/parts.
28
- - **unsupported-fatal**: v1 cannot guarantee Word-safe export if present (or if user edits would intersect it); workflow must block editing/export in those regions or fail fast.
29
-
30
- ### Preservation rules used across the matrix
31
-
32
- - **Package-level preservation**: preserve all unknown parts and relationships in the OPC package graph unless v1 must rewrite package metadata (content types / rels). OPC concepts of parts, content types, and relationships are foundational for `.docx`. citeturn15search3turn15search13turn15search2
33
- - **Markup compatibility**: preserve `mc:AlternateContent` structures and ignorable namespaces as-is; v1 does not “pick a Choice” and discard others. citeturn15search5turn15search1turn15search0
34
- - **Atomic opaque nodes**: any unknown block-level or inline-level XML subtree is represented as an **opaque node** that is not splittable by editing operations; deletion is either disallowed or deletes the entire opaque node as a unit (explicitly called out where relevant).
35
-
36
- ## Full feature compatibility matrix
37
-
38
- The following tables are the v1 **single source of truth**. Columns are identical across categories.
39
-
40
- ### Core structure
41
-
42
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
43
- |---|---|---|---|---|---|---|---|---|
44
- | Paragraphs (`w:p`) | supported-roundtrip | Fully parsed into block schema: paragraph node + paragraph properties + inline content. Paragraph is defined as `w:p` and can contain properties, annotations, custom markup, and run-level content. citeturn6search3turn18search3 | Editable: insert/delete text; split/merge paragraphs; paragraph-level ops allowed even with tracked changes enabled (see Review section for revision markup rules). | Native serialization back to `w:p` with `w:pPr` and child content; unknown children preserved as opaque nodes if not parsed. | Fully intact. | v1 never emits an empty paragraph without at least one valid run/text structure when required by context; paragraph boundary ops must also preserve comment/revision markers order. citeturn6search3turn16search14 | “Basic legal contract” with mixed paragraphs; paragraph split/merge; with comments and revisions. | editor-core, docx-parser, serializer, preservation-layer |
45
- | Runs (`w:r`) and text containers (`w:t`) | supported-roundtrip | Fully parsed into inline schema: run properties + run children (`w:t`, `w:br`, `w:tab`, drawings, fields/hyperlinks as separate nodes). Runs are defined as `w:r`. citeturn4search7turn18search18 | Editable: run segmentation is internal; user edits text seamlessly across run boundaries (editor may re-split/merge runs deterministically). | Native run emission with normalized run boundary rules; preserve run properties precedence vs styles where present. citeturn5search6turn18search0 | Fully intact. | WordprocessingML whitespace handling requires `xml:space="preserve"` in some cases; v1 maintains this on export to prevent space loss. citeturn6search14turn6search2 | Paragraph with multiple runs and mixed formatting; leading/trailing spaces; copy/paste across runs. | editor-core, serializer |
46
- | Significant whitespace in text (`xml:space="preserve"` on `w:t`) | supported-roundtrip | Import reads `xml:space` and preserves exact text content including leading/trailing spaces. citeturn6search14 | Editable (transparent to user). Editor recalculates when `xml:space="preserve"` is required after edits. | Native emission: `xml:space="preserve"` applied whenever leading or trailing spaces would otherwise be collapsed. citeturn6search14turn6search2 | Fully intact (no unintended whitespace collapse). | v1 does not attempt to normalize multiple internal spaces; it preserves literal text exactly unless user changes it. | “Whitespace torture” fixture: leading/trailing spaces, multiple spaces, tabs, mixed revisions. | editor-core, serializer |
47
- | Hard line breaks (`w:br`) | supported-roundtrip | Parsed into inline “line break” tokens; includes explicit breaks in runs. (Drawing/inline objects use their own elements; see Media.) citeturn19search0turn3search3 | Editable: insert/delete “line break” token. | Native: serialized as `w:br` in the correct run position. | Intact; Word displays as manual line breaks. | Page/column breaks are **not** treated as `w:br` in v1 unless explicitly represented that way in OOXML; `w:br` types beyond simple line break are preserve-only unless listed elsewhere. | Contract clause with manual line breaks (addresses/signature blocks). | editor-core, serializer |
48
- | Tabs (`w:tab`) | supported-roundtrip | Parsed into inline “tab” tokens (not converted to spaces). | Editable: insert/delete tab token; no “tab stop UI” in v1. | Native: serialized as `w:tab` in runs. | Intact; tab layout depends on Word tab stops/styles. | v1 does not provide a visual ruler; display in browser is approximate and may not match Word tab alignment exactly, but OOXML roundtrips. | Legal pleadings with tab-indented captions; signature blocks using tabs. | editor-core, serializer |
49
- | Paragraph styles (`w:pPr/w:pStyle`) | supported-roundtrip | Parsed and retained as paragraph style references (`pStyle` styleId). citeturn18search0turn18search2 | Locked (not exposed): v1 can apply built-in heading styles via UI (see next row), but does not edit style definitions. | Passthrough for style references; styles part preserved. citeturn18search6turn18search2 | Intact; Word applies styles normally. | If a referenced styleId is missing/corrupt in the source, v1 preserves reference but does not synthesize a style; Word behavior depends on Word’s fallback rules. | Contract with custom paragraph styles + Normal/BodyText. | docx-parser, serializer, preservation-layer |
50
- | Headings (Heading 1–9 semantics via styles and/or `w:outlineLvl`) | supported-roundtrip | Import detects headings by styleId conventions and/or outline level when present; `w:outlineLvl` defines structural outline level (0–9) though it does not itself change appearance. citeturn17view0turn18search7turn18search0 | Partially editable: v1 exposes “Heading 1–Heading 9” which sets paragraph `pStyle` to the corresponding styleId if present; v1 does **not** edit style definitions (font/spacing) for headings. | Native: emits `pStyle` unchanged/updated; preserves any existing `outlineLvl`; does not invent `outlineLvl` unless it already exists. citeturn18search0turn18search7 | Intact; Word headings appear per styles in `styles.xml`. | If a document uses custom heading styles not named/derived from built-ins, v1 preserves them but may not classify them as headings in UI; no TOC regeneration in v1. citeturn17view0 | Contract with multi-level headings, custom style inheritance, TOC field present. | editor-core, docx-parser, serializer |
51
-
52
- ### Formatting
53
-
54
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
55
- |---|---|---|---|---|---|---|---|---|
56
- | Bold (`w:b`) | supported-roundtrip | Parsed from run properties; `w:b` is the bold toggle. citeturn5search0turn5search6 | Editable: toggle bold on selection; bold inside/outside revisions supported. | Native: emitted as `w:rPr/w:b` on the minimal set of runs required. citeturn5search6turn5search4 | Intact. | **Tracked formatting changes are not generated in v1** (no new `rPrChange` revisions). Formatting edits apply directly. Existing tracked formatting revisions are preserve-only (see Review). citeturn12search11turn14view0 | Legal contract with defined terms in bold; edits inside inserted text. | editor-core, serializer |
57
- | Italic (`w:i`) | supported-roundtrip | Parsed from run properties; `w:i` is italics toggle. citeturn5search8turn5search6 | Editable: toggle italic on selection. | Native emission as `w:rPr/w:i`. citeturn5search6turn5search5 | Intact. | Same tracked-formatting caveat as bold. | Clause with italic emphasis; mixed bold+italic runs. | editor-core, serializer |
58
- | Underline (`w:u`) | supported-roundtrip | Parsed including underline style values; `w:u` defines underline and “none” removes it. citeturn6search0turn5search6 | Editable: underline toggle exposes a single default underline style; UI does not expose full underline style enumeration. | Native: emits `w:u` with `val` as needed; preserves original underline styles when not edited. citeturn6search0 | Intact; style may simplify if user re-applies underline (falls back to default single underline). | If source uses uncommon underline styles, v1 preserves unless the underline is edited, in which case the style normalizes to default underline. citeturn6search0 | Contract with underlined headings/signature lines. | editor-core, serializer |
59
- | Strikethrough (`w:strike`) | supported-roundtrip | Parsed from run properties; strike draws a horizontal line through text. citeturn5search7turn5search3 | Editable: toggle strikethrough as formatting (distinct from tracked deletion). | Native emission as `w:strike`. citeturn5search13 | Intact. | Users must not confuse strikethrough formatting with tracked deletions; tracked deletions use `w:del` containers (see Review). citeturn12search5turn13search0 | Doc with strikethrough used for “reserved/deleted” text without track changes. | editor-core, serializer |
60
- | Font family (`w:rFonts`) | supported-roundtrip | Parsed from run fonts; can specify ASCII / High ANSI / CS / East Asian font faces. citeturn6search1turn6search9 | Partially editable: v1 UI may allow selecting a font family; advanced script-specific font slots are not exposed. | Native: emits `w:rFonts` for ASCII+High ANSI; preserves CS/East Asian slots if unchanged. citeturn6search1 | Intact in Word. | Browser rendering depends on installed fonts; visual differences vs Word are expected, but OOXML values roundtrip. citeturn6search1 | Contract with mixed fonts (Times New Roman/Calibri) and defined-term styling. | editor-core, serializer |
61
- | Font size (`w:sz`) | supported-roundtrip | Parsed; `w:sz` stores half-points for non-complex script. citeturn4search22turn5search6 | Partially editable: v1 UI may expose a limited size picker. | Native: emits `w:sz`; preserves related `szCs` if present and unchanged. citeturn4search22 | Intact. | If the source uses complex-script-specific sizing, v1 preserves but does not author new complex-script sizes. citeturn4search22 | Pleading with small footers; contract with 10/12/14 pt variations. | editor-core, serializer |
62
- | Font color (`w:color`) | supported-roundtrip | Parsed; `w:color` defines run color or auto behavior. citeturn4search3turn5search6 | Partially editable: v1 may expose a restricted palette; “theme color” editing not exposed. | Native: emits `w:color`; preserves theme-related attributes if unchanged. citeturn4search3 | Intact. | Many legal workflows avoid color; if color is edited, v1 writes explicit RGB and may drop theme linkage. citeturn4search3 | Doc with red/blue markup (non-track-changes) plus normal text. | editor-core, serializer |
63
- | Paragraph alignment (`w:jc`) | supported-roundtrip | Parsed from paragraph properties; `w:jc` controls alignment. citeturn4search0turn4search9 | Partially editable: left/center/right/justify exposed. | Native: emits `w:jc` in `w:pPr` only when needed; preserves inherited style behavior when not overridden. citeturn4search0 | Intact. | Alignment may be inherited through style hierarchy; v1 does not compute a full cascade for UI display but preserves stored values. citeturn4search0turn18search0 | Signature blocks (right-aligned), centered titles, justified body. | editor-core, serializer |
64
- | Indentation (`w:ind`) | supported-roundtrip | Parsed with full attribute set (start/end/firstLine/hanging, etc.). citeturn4search1turn4search17 | Locked (not exposed in v1 UI): indentation is preserved and survives edits to text. | Passthrough/native: emitted exactly as imported if paragraph exists; no recomputation. citeturn4search1 | Intact. | v1 does not attempt to reconcile indentation vs numbering indentation; list rendering in browser may be approximate for complex styles. citeturn7search17turn4search1 | Contract with indented block quotes/recitals; list paragraphs with hanging indents. | serializer, preservation-layer |
65
- | Spacing before/after and line spacing (`w:spacing`) | supported-roundtrip | Parsed from paragraph properties. citeturn4search2turn4search6 | Locked (not exposed): spacing preserved through text edits. | Passthrough/native: emitted as imported, including before/after/line and autos. citeturn4search2 | Intact. | Browser line layout does not replicate Word pagination; spacing values roundtrip but on-screen measurement is approximate. citeturn4search2 | Contract with spacing rules; title blocks with large before/after spacing. | serializer, preservation-layer |
66
- | Character styles (`w:rPr/w:rStyle`) | preserve-only | Imported and preserved as character style references; character styles are referenced via `rStyle`. citeturn18search1turn18search5 | Not exposed: v1 does not provide a style editor or style picker for arbitrary character styles. | Passthrough: preserved and re-emitted; styles part preserved. citeturn18search6turn18search5 | Intact. | If user edits inside styled text, v1 may split runs but retains `rStyle` on resulting runs; it does not guarantee minimal run diffs. citeturn18search5turn4search7 | Doc with Hyperlink style; custom character style for defined terms. | preservation-layer, serializer |
67
-
68
- ### Lists
69
-
70
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
71
- |---|---|---|---|---|---|---|---|---|
72
- | Bullet lists (Word numbering system) | supported-roundtrip | Parsed via paragraph numbering properties `w:numPr` referencing numbering instances (`w:numId`) and levels (`w:ilvl`). citeturn7search2turn7search9turn7search13 | Editable: toggle bullet list; indent/outdent 0–8 levels; split/merge list items. | Native: updates `w:numPr` bindings; preserves existing numbering definitions unless v1 must create a new list instance. citeturn7search17turn7search12 | Intact; Word renders bullets per numbering definitions. | v1 supports common bullet formats; uncommon bullet glyphs are preserved but may render as generic bullets in-browser. citeturn7search17 | Legal outline with bullets under numbered sections; nested bullets. | numbering-engine, serializer |
73
- | Numbered lists | supported-roundtrip | Parsed using the same numbering model: abstract numbering definitions + numbering instances. citeturn7search17turn7search18turn7search12 | Editable: toggle numbered list; indent/outdent; continue numbering across adjacent items. | Native: updates `numId/ilvl` and preserves abstractNum/num structures; v1 does not rewrite list templates unless needed. citeturn7search17turn7search12 | Intact. | Number formatting (`numFmt`) variety is broad; v1 guarantees correct roundtrip but only guarantees accurate in-browser numbering for common formats (decimal, alpha, roman, bullet). citeturn7search11turn7search17 | Contract with multi-level numbering (1., 1.1, (a), (i)). | numbering-engine, serializer |
74
- | Nested lists (up to 9 levels in Word, 0–8 in `ilvl`) | supported-roundtrip | Parsed: `w:ilvl` is stored per paragraph and preserved. citeturn7search13turn7search16 | Editable: indent/outdent list items across levels; maintains list structure deterministically. | Native: emits correct `ilvl` in `numPr`. citeturn7search13 | Intact. | v1 does not provide a UI for editing `lvlText` templates; it preserves what exists. citeturn7search11 | “Deal outline” fixture: 4–6 nested levels with mixed punctuation. | numbering-engine, editor-core |
75
- | Restart numbering | supported-roundtrip | Imported restarts are detected either by new numbering instances (`w:num`) or by level overrides with `startOverride` when present. citeturn7search12turn7search0turn7search5 | Editable: “Restart numbering” command creates a new numbering instance referencing the same abstract definition or emits a level override start value at level 0. citeturn7search0turn7search12 | Native: emits new `w:num` instance and/or `lvlOverride/startOverride` depending on document constraints; preserves existing restart model if already present. citeturn7search6turn7search0 | Intact; Word restarts at specified values. | Restart semantics can also be affected by `lvlRestart` rules; v1 does not author complex restart policies—only explicit restarts requested by user. citeturn7search0 | “Schedules” exhibit: multiple separate numbered lists restarting at 1. | numbering-engine, serializer |
76
- | Numbering definitions and overrides (`abstractNum`, `num`, `lvlOverride`) | preserve-only | Imported and preserved; v1 reads enough for accurate list structure binding but does not expose definition editing. citeturn7search18turn7search12turn7search6 | Locked: no list-template editor in v1. | Passthrough: preserves numbering part; emits minimal deltas for paragraph bindings and explicit restarts. citeturn7search17turn7search12 | Intact. | If the source numbering part is internally inconsistent but Word tolerates it, v1 preserves it; if v1 must modify it, it may normalize/repair into a Word-safe form (logged as a warning). citeturn7search17turn15search3 | “Numbering zoo”: custom list templates, overrides, style-linked numbering. | preservation-layer, numbering-engine, serializer |
77
-
78
- ### Tables
79
-
80
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
81
- |---|---|---|---|---|---|---|---|---|
82
- | Basic tables (`w:tbl` / `w:tr` / `w:tc`) | supported-roundtrip | Fully parsed into table schema: rows, cells, and cell block content; `w:tbl` defines table. citeturn8search0turn8search8 | Partially editable: edit text inside cells; select cells; delete/insert **cell content**. Table structure edit (add/remove rows/cols) is **not exposed** in v1 to protect layout + merges. | Native: serialize to `w:tbl` with preserved tblPr/tblGrid; ensures each cell contains at least one paragraph. citeturn8search0turn8search12 | Intact. | WordprocessingML requires valid cell content; v1 guarantees every exported `w:tc` contains at least one `w:p` (empty paragraph allowed) to avoid corruption/repair prompts. citeturn8search12turn8search0 | “Table heavy contract”: definitions table; signature table; exhibits table. | table-engine, serializer |
83
- | Merged cells horizontal (`w:gridSpan`) | supported-roundtrip | Parsed from cell properties; `gridSpan` describes grid columns spanned. citeturn2search4turn8search1 | Locked: v1 does not expose merge/split UI. Cell text editing allowed without affecting merge metadata. | Passthrough/native: preserves `gridSpan` exactly. citeturn2search4 | Intact; Word shows merged cell. | If a user deletes an entire merged cell’s content, merge metadata remains; deleting the cell itself is not supported in v1. | Table fixture with multi-column header cells + merged signature blocks. | table-engine, preservation-layer |
84
- | Merged cells vertical (`w:vMerge`) | supported-roundtrip | Parsed from `tcPr`; `vMerge` specifies vertical merge state (restart/continue semantics). citeturn1search1turn8search1 | Locked: no merge/split UI. | Passthrough/native: preserves `vMerge` exactly. citeturn1search1 | Intact. | v1 does not recompute row heights and does not attempt to “repair” invalid vertical merge grids; it preserves what it imported unless structure editing is attempted (blocked). citeturn1search1turn8search12 | Table fixture with vertically merged stub columns. | table-engine, preservation-layer |
85
- | Table-wide properties (`w:tblPr`) | supported-roundtrip | Parsed and retained; includes borders, widths, and other table-wide properties. citeturn8search2turn8search0 | Locked: not exposed for editing. | Passthrough: emitted exactly as imported. citeturn8search2 | Intact. | Browser rendering may not match Word’s border collapsing/layout; OOXML is preserved. citeturn8search7turn8search2 | Table fixture with explicit borders, widths, and style-based formatting. | preservation-layer, serializer |
86
- | Table grid and column definitions (`w:tblGrid`) | supported-roundtrip | Preserved; grid defines shared vertical edges and default widths. citeturn2search8turn8search0 | Locked. | Passthrough. citeturn2search8 | Intact. | Because v1 does not expose column add/remove, tblGrid can be preserved safely without recomputation. citeturn2search8 | “Fixed-width comparison table” fixture with explicit grid columns. | preservation-layer |
87
- | Table layout algorithm (`w:tblLayout` fixed/auto) | preserve-only | Imported and preserved (table may be fixed or AutoFit). citeturn8search7turn8search3 | Not exposed. | Passthrough. citeturn8search7 | Intact. | Word may still adjust column widths on open depending on content and AutoFit rules; v1 does not attempt to predict these adjustments. citeturn8search7turn8search19 | AutoFit stress table: long text cells vs fixed width. | preservation-layer |
88
-
89
- ### Media
90
-
91
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
92
- |---|---|---|---|---|---|---|---|---|
93
- | Images inline (`w:drawing` with `wp:inline`) | supported-roundtrip | Parsed into inline “image” objects referencing package media parts and relationships; drawing objects are represented via `w:drawing`. citeturn3search3turn3search11 | Partially editable: select, cut/paste as a single object, delete; no crop, no wrap style editing. | Native: preserves image part + relationship IDs if unchanged; new images create new relationships and media parts with proper content types. citeturn3search3turn15search3 | Intact; Word shows image inline with text. | v1 does not support floating wrap; if an inline image is converted to floating in Word and re-imported, it becomes preserve-only (next row). citeturn3search3turn3search11 | Contract with logos; exhibits with scanned signature images inline. | media-manager, serializer |
94
- | Images floating/anchored (`wp:anchor`) | preserve-only | Imported as opaque object: v1 does not parse anchor positioning; stores original DrawingML subtree and relationships. citeturn3search3turn3search19 | Not exposed; rendered as placeholder (thumbnail if possible). | Passthrough: emits original anchor subtree unchanged. citeturn3search3turn15search0 | Intact; Word preserves floating positioning. | Editing text around anchored objects is allowed, but deleting/splitting inside the anchored object’s XML is blocked; object is atomic in v1. citeturn15search0turn15search5 | Doc with floating signature stamp/watermark-like images; inline + anchored mix. | preservation-layer, media-manager |
95
- | Captions | preserve-only | Imported as ordinary paragraphs (often via a “Caption” style) and may include sequence fields; v1 preserves style refs and fields rather than implementing caption semantics. citeturn18search0turn2search2turn2search6 | Not exposed as a special feature; caption text is editable like normal paragraph, but caption numbering is not recomputed. | Passthrough for fields/style references; paragraph text emitted normally. citeturn2search2turn18search0 | Visually intact; numbering may be stale until Word updates fields. | Caption auto-numbering typically relies on fields (e.g., SEQ); v1 does not update field results and therefore does not guarantee correct caption numbering after edits. citeturn2search6turn2search2 | Exhibit with figure/table captions using fields; edit caption text and reopen. | preservation-layer, serializer |
96
-
97
- ### Links
98
-
99
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
100
- |---|---|---|---|---|---|---|---|---|
101
- | Hyperlinks external (`w:hyperlink` with `r:id`) | supported-roundtrip | Fully parsed: `w:hyperlink` element with relationship target. citeturn2search1turn0search7 | Editable: edit display text; edit URL; remove hyperlink (keeps text). | Native: emits `w:hyperlink` and maintains relationship in `.rels`. citeturn2search1turn15search3 | Intact; clickable links in Word. | v1 preserves hyperlink history/visited flags if present; does not expose them in UI. citeturn0search7turn2search1 | Contract with external exhibit links and defined-term references to URLs. | hyperlink-manager, serializer |
102
- | Hyperlinks internal (`w:hyperlink` with `w:anchor` to bookmarks) | preserve-only | Parsed enough to render as a link; bookmark targets are preserved but bookmark management is not implemented. citeturn2search1turn6search18 | Not exposed: cannot create new internal anchors; can remove link wrapper (keeps text). | Passthrough for anchor attribute and bookmark structures. citeturn6search18turn2search1 | Intact; Word resolves links if bookmarks exist. | If the user deletes the target bookmark paragraph, Word may break the internal link; v1 does not validate bookmark integrity. citeturn6search18 | Brief with internal cross-references; bookmarks + hyperlinks. | preservation-layer, serializer |
103
-
104
- ### Review
105
-
106
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
107
- |---|---|---|---|---|---|---|---|---|
108
- | Comments anchors (range) (`w:commentRangeStart`, `w:commentRangeEnd`, `w:commentReference`) | supported-roundtrip | Fully parsed for **single-paragraph ranges**: v1 maps start/end markers and reference marks by `w:id`. Spec defines start/end range markers and reference-to-comment linkage by id. citeturn16search1turn16search3turn9search9turn9search17 | Partially editable: can add, delete, and move comment ranges within a single paragraph; editing inside range updates anchors deterministically. | Native: emits range markers and reference in correct ordering; preserves ids and ensures `comments.xml` has matching comment entries. citeturn16search1turn9search17 | Intact; Word shows anchored comments. | Comment ranges can be structurally complex (start/end markers may fall in different nestings); v1 guarantees correctness for ranges fully contained in one paragraph and not crossing opaque nodes. citeturn16search7turn16search14 | “Redline + comments” contract: comment on defined term; edit inside range; move anchor. | comment-engine, editor-core, serializer |
109
- | Comments text bodies (`/word/comments.xml`) | supported-roundtrip | Parsed into comment objects (author/date/text); comments part contains comment content. citeturn9search17turn9search4 | Editable: add/edit/delete comment text. | Native: emits `comments.xml` with stable ids and required entries. citeturn9search17 | Intact. | v1 preserves comment metadata fields (author/date). If missing, v1 writes system defaults (e.g., “Unknown”) but does not fabricate identity parts. citeturn10search14 | Comment-only fixture: multiple comments with authors/dates. | comment-engine, serializer |
110
- | Comment replies (threading via `commentsExtended.xml` / `w15:commentEx` / `paraIdParent`) | supported-roundtrip | Parsed when present: v1 reads `commentsExtended.xml` to link replies using `paraIdParent`. citeturn11search7turn11search4turn11search11 | Editable: add replies; reorder not supported (chronological only). | Native: emits/updates `commentsExtended.xml` (`commentsEx`) and `commentEx` entries so Word recognizes threads. citeturn11search7turn11search11turn10search5 | Intact; Word displays replies as threaded. | Thread linkage depends on `paraId`/`paraIdParent` consistency; v1 assigns stable paraIds and does not change them on simple edits to comment text. citeturn11search7turn11search3 | Threaded comments fixture (Word 2013+): root comment + 3 replies + reopen. | comment-engine, serializer |
111
- | Comment resolution status (done/resolved via `w15:commentEx` `done`) | supported-roundtrip | Imported from `commentEx` “done” flag when present. citeturn10search1turn10search8 | Editable: resolve/unresolve supported (per-thread root). | Native: toggles `w15:done` on the root comment’s `commentEx`. citeturn10search1turn11search7 | Intact; Word shows resolved/done state. | Some Word clients treat “resolved” semantics differently across versions; v1 writes the standards-based flag and does not attempt client-specific variants. citeturn9search7turn10search1 | Threaded comments + resolved state fixture. | comment-engine, serializer |
112
- | Track changes global setting (`w:trackRevisions` in settings) | supported-roundtrip | Imported and preserved; `trackRevisions` specifies revisions tracking is enabled in the document settings. citeturn3search12turn0search5 | Partially editable: v1 exposes a document-level “Track changes mode” toggle that controls whether edits generate revision markup. | Native: emits/updates `w:trackRevisions` in settings when toggled. citeturn3search12turn13search7 | Intact; Word respects track changes being enabled. | Even if `trackRevisions` is on, Word does not automatically “track” changes unless the correct revision markup exists; v1 must generate `w:ins`/`w:del` (next rows). citeturn3search12turn13search0 | Fixture: same document edited with toggle off vs on; compare OOXML output. | review-engine, serializer |
113
- | Tracked insertions (run-level) (`w:ins` inserted run content) | supported-roundtrip | Fully parsed: inserted content containers are recognized and rendered as insertions. citeturn13search0turn13search1 | Editable: insert text while tracking is on creates `w:ins` around inserted runs; edits inside an inserted region keep the region inserted. | Native: emits `w:ins` with required metadata (author/date/id as configured) and correct child runs. citeturn13search0turn3search12 | Intact redlines in Word. | v1 does not generate “move” revisions; move operations become insert+delete (see “revisions overlap” and “moves” rows). citeturn12search10turn12search2 | “Redlines basic”: insertions across multiple runs with formatting. | review-engine, serializer |
114
- | Tracked deletions (run-level) (`w:del` deleted run content) | supported-roundtrip | Fully parsed and rendered as deletion with deleted text representation. citeturn12search5turn13search19 | Editable: delete text while tracking is on creates `w:del` containers; backspace/delete across run boundaries supported. | Native: emits `w:del` with required metadata; deleted inner text is emitted as deleted content (Word shows strikethrough per view). citeturn12search5turn16search12 | Intact redlines in Word. | v1 does not guarantee “minimal diff” for deletions; deleting across formatting boundaries may produce multiple adjacent `w:del` segments. | “Redlines basic”: deletions with mixed formatting + reopen. | review-engine, serializer |
115
- | Paragraph mark deletion/merge (`w:del` on paragraph mark run properties) | supported-roundtrip | Imported and preserved; deletion of paragraph mark merges paragraphs in tracked-change semantics. citeturn3search1turn14view0 | Editable: deleting a paragraph boundary while tracking is on generates paragraph mark deletion revision (join paragraphs with tracked marker). | Native: emits `w:del` in paragraph mark properties as Word expects. citeturn3search1turn14view0 | Intact; Word shows paragraph merge as tracked change. | This is distinct from deleting all text in a paragraph; v1 uses the paragraph-mark mechanism for boundary deletions only. citeturn3search1turn6search3 | Fixture: delete paragraph boundary between two clauses with comments + redlines enabled. | review-engine, serializer |
116
- | Paragraph mark insertion/split (`w:ins` on paragraph mark run properties) | supported-roundtrip | Imported and preserved; insertion of a paragraph mark is tracked via paragraph mark ins semantics. citeturn12search4turn12search8 | Editable: pressing Enter while tracking is on generates paragraph mark insertion revision (split paragraph). | Native: emits paragraph mark insertion markup. citeturn12search8 | Intact. | v1 does not generate “formatting change” revisions for paragraph property changes; splitting paragraphs preserves the imported paragraph properties deterministically. citeturn14view0turn4search5 | Fixture: split a numbered paragraph; split inside comment range (single-paragraph only). | review-engine, serializer |
117
- | Accept/reject insertions and deletions | supported-roundtrip | Imported revision markup is recognized for supported revision types (`w:ins` / `w:del` run content and paragraph-mark ins/del). citeturn13search0turn12search5turn14view0 | Editable: accept/reject per change and “accept all / reject all” supported for those types. | Native: accept = unwrap insertions / remove deletions; reject = remove insertions / unwrap deletions. This mirrors common Open XML revision processing patterns. citeturn14view0turn13search1turn13search19 | Intact; Word opens with changes applied. | For preserve-only revision types (moves, formatting changes, table-row revisions, numberingChange), accept/reject UI is disabled to avoid partial corruption. citeturn12search2turn12search11turn3search5turn1search8 | Fixture: accept/reject flow across paragraph joins, list items, and table-cell text. | review-engine |
118
- | Tracked moves (`moveFrom`/`moveTo` and range markers) | preserve-only | Imported and preserved; v1 renders as delete+insert visually to user (labelled “move (preserved)”). citeturn12search10turn14view0 | Not exposed: cannot create new move revisions; cannot accept/reject moves in v1 UI (must use Word). | Passthrough: emits move markup unchanged. citeturn12search10turn14view0 | Intact; Word shows move tracking as in source. | Editing within a moved range is blocked because move ranges can cross structural boundaries; user must accept/reject in Word first for safe editing. citeturn14view0turn12search10 | Fixture: Word-generated “Move text” revision spanning multiple paragraphs. | preservation-layer, review-engine |
119
- | Tracked formatting changes (`rPrChange`, `pPrChange`) | preserve-only | Imported and retained; v1 does not attempt to interpret these revisions beyond marking them as “format change (preserved)”. citeturn12search11turn14view0 | Not exposed: cannot create new tracked formatting changes; cannot accept/reject these in v1. | Passthrough unchanged. citeturn12search11turn14view0 | Intact; Word shows formatting revisions. | If a user edits a paragraph/run that contains formatting-change revisions, v1 blocks the edit unless the user first accepts/rejects formatting changes in Word. citeturn12search11turn14view0 | Fixture: toggle bold with “Track formatting” enabled in Word; reopen after v1 view-only. | preservation-layer, review-engine |
120
- | Comments on deleted text (edge case) | preserve-only | Imported: comment anchors and deletions may overlap; v1 preserves the exact marker placement and renders comment thread with an indicator “anchored to deleted text”. citeturn16search0turn12search5turn16search1 | Not editable: v1 blocks edits that would require re-anchoring comments whose anchor text is deleted. | Passthrough: preserves overlap in markup. | Word behavior varies by view; Word can hide comments associated with text marked for deletion in Track Changes views. citeturn16search0turn16search8 | This is a known Word UX behavior; v1 preserves data but cannot force Word to display hidden comments in certain markup views. citeturn16search0turn16search8 | Fixture: comment anchored to a word, then that word is deleted with Track Changes on. | preservation-layer, comment-engine |
121
- | Edits inside commented ranges (edge case) | supported-roundtrip | For single-paragraph comment ranges only: v1 updates anchor offsets deterministically as text is inserted/deleted inside the range. citeturn16search1turn16search14 | Partially editable: allowed within same paragraph; if edit would cause range to cross paragraphs or opaque nodes, edit is blocked. | Native: emits updated comment range markers positions. citeturn16search1turn16search3 | Intact. | Multi-paragraph comment ranges are preserve-only (next row). citeturn16search7 | Fixture: insert text mid-range; delete part of range; add reply. | comment-engine, editor-core |
122
- | Multi-paragraph comment ranges | preserve-only | Imported and preserved as opaque “comment-range spanning blocks” because start/end markers can cross complex nestings. citeturn16search7turn16search14 | Not exposed: cannot create/edit multi-paragraph comment ranges. | Passthrough unchanged. | Intact. | v1 UI still shows the comment thread, but highlight mapping in-browser is simplified (e.g., highlights first paragraph only) while preserving OOXML anchors. | Fixture: comment spanning two paragraphs in Word. | preservation-layer, comment-engine |
123
- | Revisions overlapping lists (edge case) | preserve-only | Imported revisions that structurally affect numbering/list properties (e.g., numbering changes) are preserved. Numbering changes can be tracked with dedicated elements like `numberingChange`. citeturn1search8turn7search17 | Not exposed: v1 blocks operations that would create list-structure revisions beyond run-level insert/delete inside a list item. | Passthrough (including `numberingChange` if present). citeturn1search8 | Intact. | v1 supports redlines **within** list item text, but does not support tracked changes that alter list definitions/levels as revisions. citeturn1search8turn7search13 | Fixture: change list level/numbering style with Track Changes on in Word. | preservation-layer, review-engine, numbering-engine |
124
- | Revisions overlapping tables (edge case) | preserve-only | Imported structural table revisions (row insert/delete, cell merge revisions) are preserved; table row insertion/deletion revisions use `ins`/`del` on row properties. citeturn3search4turn3search5turn1search5 | Not exposed: v1 blocks table structural edits when Track Changes on; only run-level insert/delete inside cell paragraphs is supported. | Passthrough. citeturn3search4turn3search5 | Intact. | Accept/reject for these structural table revisions is disabled in v1; use Word for that operation. citeturn3search4turn3search5turn14view0 | Fixture: insert/delete table row with Track Changes on; cell merge with Track Changes. | preservation-layer, review-engine, table-engine |
125
- | Nested revisions (edge case) | preserve-only | Imported nested/overlapping `w:ins`/`w:del` structures are preserved as-is; v1 does not normalize by rewriting. citeturn13search0turn12search5turn3search17 | Not exposed: cannot edit inside nested revision regions; cannot accept/reject them in v1. | Passthrough unchanged. | Intact. | Nested revisions can be semantically involved (many elements participate in revision tracking); v1 intentionally avoids rewriting to prevent corruption. citeturn3search17turn14view0 | Fixture: multiple authors produce nested revisions; ensure v1 preserves and reopens in Word. | preservation-layer, review-engine |
126
- | Deleting content with comments attached (edge case) | supported-roundtrip | v1 supports tracked deletions of text inside a comment range; the comment anchor range is updated if it remains within the same paragraph and not fully deleted. citeturn16search1turn12search5turn16search0 | Partially editable: if deletion would remove the entire anchor, v1 prompts and requires explicit action: “Delete comment too” or “Cancel deletion.” | Native: either (a) delete comment and remove markers, or (b) block deletion to keep anchor, matching Word’s anchoring constraint that deleting anchor text often deletes the comment. citeturn16search2turn16search6 | Intact per chosen action. | Word commonly deletes comments when the anchored text is deleted unless a workaround keeps at least one anchored character; v1 exposes this explicitly to prevent silent loss. citeturn16search2turn16search6 | Fixture: delete entire commented phrase with Track Changes on/off; verify comment retention rules. | comment-engine, review-engine |
127
- | Mixed formatting within revisions (edge case) | supported-roundtrip | Inserted/deleted content can contain runs with independent formatting; v1 imports runs inside `w:ins` and `w:del` normally. citeturn13search0turn12search5turn5search6 | Editable: formatting can be applied inside inserted text; formatting across inserted/deleted boundaries is supported as direct formatting (not as tracked formatting change). | Native: emits formatting as run properties within revision containers. citeturn5search6turn13search0 | Intact. | v1 never creates `rPrChange` to represent formatting changes as tracked revisions; Word will show formatting but not as a tracked “format change.” citeturn12search11turn14view0 | Fixture: insert bold text; delete italic text; accept/reject. | editor-core, review-engine, serializer |
128
-
129
- ### Document structure
130
-
131
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
132
- |---|---|---|---|---|---|---|---|---|
133
- | Section breaks and section properties (`w:sectPr`) | preserve-only | Imported and preserved; OOXML locates section properties at the end of the section (often in last paragraph) and final `sectPr` as child of body. citeturn1search2turn2search3 | Not exposed: cannot insert/delete section breaks in v1. | Passthrough: emits section properties exactly as imported. citeturn1search2 | Intact; Word maintains page layout, margins, columns defined by sections. | Because section breaks affect pagination and headers/footers, v1 treats them as immutable to avoid breaking the document layout graph. citeturn1search2turn3search2 | Fixture: contract with multiple sections (portrait/landscape), continuous break, different header/footer. | preservation-layer, section-engine |
134
- | Headers and footers (references and parts) (`w:headerReference`, `w:footerReference`, header/footer parts) | preserve-only | Imported and preserved: section `sectPr` references header/footer parts via relationship ids. citeturn3search2turn3search6turn3search18 | Not exposed: cannot edit header/footer content in v1. | Passthrough: preserves header/footer parts and relationships. citeturn3search2turn3search6turn15search3 | Intact; page numbers, logos, etc. preserved. | Headers/footers often include fields (PAGE/NUMPAGES) and layout constructs; v1 preserves but does not update fields. citeturn2search6turn3search18 | Fixture: page numbering in footer + “FIRST” header; reopen and verify. | preservation-layer, header-footer-engine |
135
- | Footnotes (references + footnote part) | preserve-only | Imported and preserved: footnotes have reference marks in body and a footnote story part with `footnote` elements. citeturn1search11turn1search7 | Not exposed for editing in v1: footnote content is readable (rendered in a side panel/popover) but locked. | Passthrough for footnotes part and references. citeturn1search11turn1search7 | Intact. | Footnote placement/numbering is controlled by Word; v1 does not add/remove footnotes and does not validate advanced conformance constraints beyond preserving what was imported. citeturn1search11turn1search3 | Fixture: contract with multiple footnotes; footnote inside table cell. | preservation-layer, notes-engine |
136
- | Endnotes (references + endnote part) | preserve-only | Imported and preserved; endnote references use `endnoteReference`. citeturn1search3turn1search11 | Not exposed (same behavior as footnotes). | Passthrough unchanged. citeturn1search3 | Intact. | Spec notes conformance constraints (e.g., endnote references inside notes can be non-conformant); v1 preserves but will not create new such constructs. citeturn1search3 | Fixture: endnotes at end of document; mixed footnotes/endnotes. | preservation-layer, notes-engine |
137
-
138
- ### Advanced and edge features
139
-
140
- | Feature Name | Support Class | Import Status | Edit Status | Export Status | Reopen in Word Behavior | Known Caveats | Fixture Coverage | Owner |
141
- |---|---|---|---|---|---|---|---|---|
142
- | Fields (simple fields `w:fldSimple`) | preserve-only | Imported and preserved as opaque inline nodes; v1 renders the current field result text but does not interpret field codes. Fields can be represented using `fldSimple`. citeturn2search2turn2search6 | Not exposed: cannot insert/update fields in v1. | Passthrough: preserves original field XML and existing field result runs. citeturn2search2turn2search6 | Intact; Word updates field results when user updates fields. | Since v1 does not recompute field results, any changes to surrounding text may require Word to update fields for correct display (TOC, page numbers, cross refs). citeturn2search6turn9search17 | Fixture: PAGE/REF/TOC/SEQ fields; reopen and update fields in Word. | preservation-layer |
143
- | Fields (complex fields via `w:fldChar` + `w:instrText`) | preserve-only | Imported and preserved as opaque inline sequences; v1 does not attempt to restructure begin/separate/end runs. citeturn2search6turn2search10turn6search10 | Not exposed. | Passthrough unchanged. citeturn2search10turn2search6 | Intact. | Editing inside a complex field region is blocked; user must edit in Word or convert field to text there. citeturn2search10turn2search6 | Fixture: TOC field, REF field cross-reference, DATE field, hyperlink-as-field variants. | preservation-layer |
144
- | Content controls (SDTs) block-level (`w:sdt` block) | preserve-only | Imported as opaque blocks: SDT properties and content preserved. SDTs encapsulate block-level structures via `sdtPr` and `sdtContent`. citeturn19search11turn2search11 | Not exposed: v1 does not create or edit content control properties; content inside SDT is locked in v1 to avoid breaking bindings/locks. | Passthrough unchanged. citeturn19search11turn2search11 | Intact. | Locked SDTs can be “undeletable” or behave unexpectedly across clients when combined with track changes/comments; v1 avoids editing them. citeturn12search13turn2search11 | Fixture: template doc with content controls (repeating sections, locked sections). | preservation-layer |
145
- | Content controls (SDTs) inline-level (`w:sdt` inline) | preserve-only | Imported as opaque inline nodes. citeturn19search19turn2search11 | Not exposed. | Passthrough unchanged. citeturn19search19 | Intact. | Same as block SDTs: editing inside is blocked. | Fixture: inline SDTs around party names/defined terms. | preservation-layer |
146
- | Embedded objects (`w:object`, OLE, VML positioning) | preserve-only | Imported as opaque inline objects; `w:object` indicates embedded object and positioning is via VML. citeturn19search0turn19search16 | Not exposed; displayed as placeholder. | Passthrough: preserves object parts, relationships, and VML. citeturn19search0turn15search3 | Intact; Word shows embedded object. | Embedded objects can include additional linked field codes; v1 preserves but does not validate them. citeturn19search8turn19search0 | Fixture: embedded Excel object; embedded Visio; reopen in Word. | preservation-layer, media-manager |
147
- | External content imports (`w:altChunk`) | preserve-only | Imported and preserved as opaque block; `altChunk` anchors external content to be imported by Word. citeturn19search1turn19search9 | Not exposed; cannot expand/convert altChunk in v1. | Passthrough unchanged. citeturn19search1 | Intact; Word may convert/import on open/save. | AltChunk behavior depends on Word processing; v1 does not “apply” the chunk. If the legal workflow requires editing imported content, open and save in Word first to materialize it. citeturn19search5turn19search1 | Fixture: doc with altChunk from HTML; reopen in Word to confirm non-damage. | preservation-layer |
148
- | Custom XML markup (`w:customXml` wrappers and custom XML parts) | preserve-only | Imported and preserved; custom XML can wrap inline runs, paragraphs, tables, rows, or cells. citeturn19search14turn19search6turn19search2 | Not exposed; editing inside customXml-wrapped regions is blocked unless the wrapper encloses only supported plain text and can be maintained without splitting (rare; disabled in v1). | Passthrough: preserves wrappers + associated custom XML parts and relationships. citeturn19search6turn15search3 | Intact. | Custom XML is frequently used for document assembly systems; splitting paragraphs/runs inside wrappers can break bindings, so v1 locks these regions. citeturn19search6turn19search14 | Fixture: doc assembly template with customXml tags around party names and clauses. | preservation-layer |
149
- | Unknown OOXML elements in body | preserve-only | Imported as opaque nodes at the smallest safe granularity (block or inline) and preserved as XML subtrees. Supported structures remain editable; unknown nodes are atomic. Markup compatibility constructs are preserved. citeturn15search0turn15search5turn15search1 | Not exposed: cannot edit inside unknown nodes; delete/cut allowed only as a whole-node operation. | Passthrough: exact subtree is re-emitted; ignorable namespaces and AlternateContent preserved. citeturn15search5turn15search1 | Intact in Word. | If an unknown node is removed, Word may lose that feature; v1 requires explicit user confirmation for deleting opaque nodes (“This may remove unsupported Word features”). citeturn15search0turn15search5 | Fixture: doc containing SmartArt/diagrams, custom namespaces, AlternateContent blocks. | preservation-layer |
150
- | Unknown OOXML parts/relationships in package | preserve-only | Imported into package manifest and preserved. OPC relies on parts, relationships, and content types; v1 preserves unknown relationships and parts unless it must rewrite `[Content_Types].xml` due to new media. citeturn15search3turn15search13turn15search2 | Not exposed. | Passthrough with minimal necessary updates for new parts (images/comments). citeturn15search3turn15search13 | Intact. | When new parts are added (e.g., images), v1 must update content types and relationships carefully; QA must validate Word opens without repair prompts. citeturn15search3turn15search13 | Fixture: doc with custom parts + add a comment + add an image; verify relationships remain valid. | preservation-layer, serializer |
151
- | Malformed OOXML (not well-formed XML, broken relationships/content types) | unsupported-fatal | Import validates: XML must be well-formed; relationship targets must be resolvable enough to preserve. | Not editable; v1 opens in “read-only diagnostics” mode only and blocks export. | No export permitted. | N/A (export blocked). | This is the only safe stance for high-integrity legal workflows: emitting a repaired guess risks silent corruption. citeturn15search3turn15search13 | Fixture: intentionally corrupted `.docx` with missing rel target / malformed XML. | docx-parser, serializer |
152
-
153
- ## Safety guarantees and scope boundaries
154
-
155
- ### Guaranteed safe features
156
-
157
- The following are guaranteed **supported-roundtrip** in v1 (import → edit within stated bounds → export → reopen in Word intact):
158
-
159
- - Paragraphs, runs/text, whitespace preservation, hard line breaks, tabs. citeturn6search3turn4search7turn6search14
160
- - Headings via paragraph style references (no style editing). citeturn18search0turn18search2
161
- - Inline formatting: bold, italic, underline (default style), strikethrough. citeturn5search0turn5search8turn6search0turn5search7
162
- - Lists (including nested) and explicit restart numbering. citeturn7search17turn7search13turn7search0
163
- - Tables: table body structure, merged cells preserved, cell text editing safe. citeturn8search0turn2search4turn1search1
164
- - Inline images (`wp:inline`). citeturn3search3turn3search11
165
- - Hyperlinks (external via relationships). citeturn2search1turn0search7turn15search3
166
- - Comments (single-paragraph ranges), replies (threading), and resolution state. citeturn16search1turn11search7turn10search1
167
- - Tracked insertions and deletions (run-level and paragraph-mark level) and accept/reject for those types. citeturn13search0turn12search5turn14view0
168
-
169
- ### Preserve-only features
170
-
171
- These features are preserved and roundtrip to Word, but are not editable (or are editable only as atomic objects):
172
-
173
- - Section breaks and section properties, headers/footers, footnotes/endnotes. citeturn1search2turn3search2turn1search11
174
- - Fields (simple and complex). citeturn2search2turn2search6turn2search10
175
- - Content controls (SDTs). citeturn19search11turn19search19
176
- - Embedded objects (OLE/VML), floating/anchored drawings, altChunk, custom XML wrappers. citeturn19search0turn3search3turn19search1turn19search6
177
- - Tracked moves, tracked formatting changes, tracked structural revisions for tables/lists beyond run-level insert/delete inside content. citeturn12search10turn12search11turn3search4turn1search8
178
- - Unknown OOXML in body or unknown package parts/relationships (opaque preservation). citeturn15search0turn15search5turn15search3
179
-
180
- ### Known risk areas
181
-
182
- These are specifically called out for engineering and QA because they can produce subtle corruption if mishandled:
183
-
184
- - **Comments vs deletions**: Word may hide comments anchored to deleted text in certain Track Changes views; v1 preserves the markup but cannot control Word UI behavior. citeturn16search0turn16search8
185
- - **Multi-paragraph comment ranges**: marker placement can cross complex XML nesting; v1 preserves but does not edit. citeturn16search7turn16search14
186
- - **Structural revisions in tables/lists**: OOXML uses specialized revision elements (e.g., row ins/del, numberingChange, cellMerge). v1 preserves but does not author or accept/reject them. citeturn3search4turn1search8turn1search5
187
- - **Markup compatibility**: incorrect handling of `mc:AlternateContent` (e.g., dropping unchosen branches) can destroy content; v1 preserves all branches. citeturn15search5turn15search1
188
- - **OPC relationship integrity**: any serializer bug in relationships or content types can trigger Word repair dialogs. citeturn15search3turn15search13turn15search2
189
-
190
- ## Test fixture map for QA and interoperability
191
-
192
- This section defines the **required `.docx` fixtures** that QA must maintain. Fixtures are intentionally legal-workflow-shaped (contracts, exhibits, redlines) and must be validated by:
193
- (1) import → (2) edit operations → (3) export → (4) reopen in Word and confirm no repair + intended display.
194
-
195
- | Fixture ID | Fixture name | Required contents | Primary features validated |
196
- |---|---|---|---|
197
- | F01 | Basic contract skeleton | 10–20 paragraphs, mixed runs, leading/trailing whitespace cases | Paragraphs, runs/text, whitespace preservation, split/merge paragraphs citeturn6search3turn6search14 |
198
- | F02 | Headings and styles contract | Heading 1–4, custom paragraph styles, outline level present in some styles | Headings, `pStyle`, style preservation citeturn18search0turn18search7 |
199
- | F03 | Legal outline numbering | Multi-level numbered list (1., 1.1, (a), (i)), nested bullets | Lists, nested lists, numbering preservation citeturn7search13turn7search17 |
200
- | F04 | Restart numbering schedules | Two separate numbered lists restarting at 1; one uses `startOverride` | Restart numbering, overrides citeturn7search0turn7search6 |
201
- | F05 | Table-heavy agreement | 3–5 tables with borders, fixed grid columns, long text in cells | Basic tables, tblGrid preservation, cell paragraph validity citeturn8search0turn2search8turn8search12 |
202
- | F06 | Merged-cells signature table | Horizontal `gridSpan` merges + vertical `vMerge` merges | Merged cells preservation citeturn2search4turn1search1 |
203
- | F07 | Inline images exhibit | Inline logo and scanned signature images | Inline images + OPC rel correctness citeturn3search11turn15search3 |
204
- | F08 | Hyperlinks exhibit list | External hyperlinks (http/https/mailto) in body and in a table cell | Hyperlink import/edit/export + rels citeturn2search1turn15search3 |
205
- | F09 | Comments anchored single paragraph | Several comments with overlapping ranges inside one paragraph; edit inside ranges | Comment anchors (single-paragraph) + edits inside range citeturn16search1turn16search14 |
206
- | F10 | Threaded comments and resolve | Root comment + 2 replies, resolved/done state set, mix of authors | Replies via commentsExtended + done flag citeturn11search7turn10search1 |
207
- | F11 | Redlines basic | Insertions, deletions, mixed formatting within revisions, accept/reject flows | `w:ins`/`w:del`, accept/reject, mixed formatting in revisions citeturn13search0turn12search5turn14view0 |
208
- | F12 | Redlines paragraph joins/splits | Delete a paragraph mark; insert paragraph mark; accept/reject | Paragraph mark ins/del semantics citeturn3search1turn12search8 |
209
- | F13 | Comments on deleted text | Comment anchored to a word that is later deleted under Track Changes | Edge case: comment+deletion overlap; Word visibility caveat citeturn16search0turn12search5 |
210
- | F14 | Revisions in tables and lists | Table row inserted/deleted with Track Changes; numberingChange present | Preserve-only structural revisions; ensure no damage on roundtrip citeturn3search4turn1search8 |
211
- | F15 | Sections + headers/footers | Two sections with different header/footer, page numbers fields | Preserve-only sections + headers/footers + fields citeturn1search2turn3search2turn2search6 |
212
- | F16 | Footnotes and endnotes | Multiple footnotes and endnotes; references in body and in table | Preserve-only notes; rendering/read-only behavior citeturn1search11turn1search3 |
213
- | F17 | Fields and TOC | TOC (complex field), cross-references, PAGE fields in footer | Preserve-only fields; ensure no structural damage citeturn2search6turn2search10 |
214
- | F18 | Content controls template | SDT blocks and inline SDTs with locking properties | Preserve-only SDTs; locked editing enforcement citeturn19search11turn19search19 |
215
- | F19 | Custom XML doc assembly | `w:customXml` wrappers around paragraphs/runs, custom XML parts | Preserve-only custom XML; block edits inside wrappers citeturn19search6turn19search14 |
216
- | F20 | Unknown OOXML and AlternateContent | `mc:AlternateContent`, ignorable namespaces, SmartArt/diagrams | Unknown OOXML preservation + markup compatibility rules citeturn15search5turn15search1turn3search19 |
217
- | F21 | Malformed/broken docx | Missing relationship target and/or malformed XML | Unsupported-fatal behavior (block export) citeturn15search3turn15search13 |
218
-
219
- This fixture set is the minimum required for the matrix above. Any new feature request must (a) add rows to the matrix and (b) add at least one new fixture or extend an existing fixture with explicit Word reopen assertions.