@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,322 +0,0 @@
1
- # Wave 1 - Component Boundaries Spec
2
-
3
- **Agent:** A1 (Architecture Design Packet)
4
- **Date:** 2026-03-25
5
- **Status:** frozen for Wave 2 implementation
6
-
7
- This spec freezes ownership, import directions, contract seams, and proof handoff for the Wave 1 promoted components.
8
-
9
- ## 1. Component Map
10
-
11
- ```text
12
- src/
13
- api/ public contract types only
14
- model/ canonical-document-model
15
- core/ canonical-document-model, command-and-transaction-runtime
16
- review/ comments-and-anchor-mapping, tracked-changes-and-review-actions
17
- io/ docx-import-and-normalization, docx-export-and-serialization
18
- preservation/ unsupported-ooxml-preservation
19
- validation/ compatibility-and-word-validation
20
- runtime/ command-and-transaction-runtime
21
- ui/ react-editor-ui
22
- ```
23
-
24
- ## 2. Ownership Table
25
-
26
- | Component | Source owner | Wave 1 role | Repo-land wave | Baseline-proof wave |
27
- | --- | --- | --- | --- | --- |
28
- | canonical-document-model | `src/model`, `src/core` type wrappers, `src/api` public type exports | A1 design -> A2 contract and impl | Wave 2 | Wave 3 |
29
- | command-and-transaction-runtime | `src/core`, `src/runtime` | A1 design -> A2 contract and impl | Wave 2 | Wave 3 |
30
- | comments-and-anchor-mapping | `src/review` | A1 cross-boundary design -> A4 contract and impl | Wave 4 | Wave 5 |
31
- | tracked-changes-and-review-actions | `src/review` | A1 cross-boundary design -> A4 contract and impl | Wave 5 | Wave 6 |
32
- | docx-import-and-normalization | `src/io` reader or normalizer or canonicalizer | A1 design -> A3 contract and impl | Wave 2 | Wave 3 |
33
- | docx-export-and-serialization | `src/io` serializer or package writer | A1 design -> A3 contract and impl | Wave 2 | Wave 3 |
34
- | unsupported-ooxml-preservation | `src/preservation` | A1 design -> A3 contract and impl | Wave 6 | Wave 7 |
35
- | compatibility-and-word-validation | `src/validation` | A1 design -> A3 contract and impl | Wave 3 | Wave 4 |
36
- | react-editor-ui | `src/ui` | A1 design -> A4 contract and impl | Wave 2 | Wave 3 |
37
-
38
- ## 3. Import Direction Rules
39
-
40
- Allowed high-level dependency directions:
41
-
42
- ```text
43
- src/api <- nothing in src/
44
- src/model <- src/api
45
- src/core <- src/model, src/api
46
- src/review <- src/model, src/core
47
- src/preservation <- src/model, src/core
48
- src/validation <- src/model, src/core, src/api
49
- src/io <- src/model, src/core, src/preservation, src/validation
50
- src/runtime <- src/model, src/core, src/review, src/io, src/preservation, src/validation, src/api
51
- src/ui <- src/runtime, src/api, src/core view adapters only
52
- ```
53
-
54
- Forbidden directions:
55
-
56
- - `src/api` must not import from any `src/*` runtime module.
57
- - `src/model` must not import from `src/core`, `src/review`, `src/io`, `src/preservation`, `src/validation`, `src/runtime`, or `src/ui`.
58
- - `src/ui` must not import from `src/io`, `src/preservation`, or `src/validation`.
59
- - `src/ui` must not mutate review or preservation state directly.
60
- - `src/io` must not import from `src/runtime` or `src/ui`.
61
- - `src/review` and `src/preservation` must not import from `src/runtime` or `src/ui`.
62
-
63
- ## 4. Canonical Envelope Boundary
64
-
65
- `src/model` owns the canonical document envelope and the scalar types needed to serialize it.
66
-
67
- Frozen top-level keys:
68
-
69
- - `schemaVersion`
70
- - `docId`
71
- - `createdAt`
72
- - `updatedAt`
73
- - `metadata`
74
- - `styles`
75
- - `numbering`
76
- - `media`
77
- - `content`
78
- - `review`
79
- - `preservation`
80
- - `diagnostics`
81
-
82
- Frozen domain rule:
83
-
84
- - `content`, `review`, and `preservation` are the mutable editing domains.
85
- - `styles`, `numbering`, `media`, `metadata`, and `diagnostics` are still schema-owned first-class data and must not be recreated as ad hoc runtime-only caches.
86
-
87
- Serialization rule:
88
-
89
- - Canonical state must remain JSON-serializable and deterministic.
90
- - Use plain object or array shapes for persisted stores rather than runtime-only `Map` containers.
91
-
92
- ## 5. Runtime And UI Boundary
93
-
94
- `src/runtime` owns the live editing session. `src/ui` is a projection and command-dispatch layer only.
95
-
96
- Frozen runtime responsibilities:
97
-
98
- - load from `.docx` bytes or `PersistedEditorSnapshot`
99
- - expose an external-store subscription pair plus a render snapshot getter for React rendering
100
- - own command dispatch, transaction commit, undo, redo, and remapping
101
- - emit warnings, events, and compatibility data
102
- - provide `getPersistedSnapshot()` separately from the render snapshot and provide `.docx` export
103
-
104
- Frozen UI responsibilities:
105
-
106
- - subscribe to runtime state
107
- - render toolbar, editor surface, comments or review panels, compatibility surfaces, and status surfaces
108
- - translate gestures into runtime commands
109
- - expose the host ref surface through thin runtime wrappers
110
-
111
- Frozen prohibitions:
112
-
113
- - React must not own editable canonical truth.
114
- - React must not call IO or preservation modules directly.
115
- - Runtime must not render UI or depend on React.
116
-
117
- ## 6. Position, Range, And Anchor Contract
118
-
119
- Frozen shared types:
120
-
121
- ```ts
122
- type Position = number;
123
-
124
- interface DocRange {
125
- from: Position;
126
- to: Position;
127
- }
128
-
129
- interface BoundaryAssoc {
130
- start: -1 | 1;
131
- end: -1 | 1;
132
- }
133
- ```
134
-
135
- Frozen size rules:
136
-
137
- - text node size = Unicode code point count
138
- - atomic inline leaf size = `1`
139
- - atomic block leaf size = `1`
140
- - container size = `2 + sum(childSizes)`
141
- - the document root token is not counted; position `0` is before the first child of the editable story
142
- - the shared position space applies to the editable main story plus atomic placeholders inside it, not to out-of-band preserved stories or package parts
143
-
144
- Frozen anchor states:
145
-
146
- ```ts
147
- type RangeAnchor = {
148
- kind: "range";
149
- range: DocRange;
150
- assoc: BoundaryAssoc;
151
- };
152
-
153
- type NodeAnchor = {
154
- kind: "node";
155
- at: Position;
156
- assoc: -1 | 1;
157
- };
158
-
159
- type DetachedAnchor = {
160
- kind: "detached";
161
- lastKnownRange: DocRange;
162
- reason: "deleted" | "invalidatedByStructureChange" | "importAmbiguity";
163
- };
164
- ```
165
-
166
- Frozen remap rule:
167
-
168
- - After every committed transaction, the runtime remaps selection, review anchors, and preservation bindings before subscribers are notified.
169
- - Invalid anchors become `detached`; they are not silently removed.
170
-
171
- ## 7. Review Boundary
172
-
173
- `src/review` owns comments, revisions, and remap helpers, but it does not own position arithmetic or command dispatch.
174
-
175
- Frozen review-store shape:
176
-
177
- ```ts
178
- type ReviewStore = {
179
- comments: Record<string, CommentThread>;
180
- revisions: Record<string, RevisionRecord>;
181
- };
182
- ```
183
-
184
- Frozen v1 authoring scope:
185
-
186
- - editable single-paragraph comment ranges and threads
187
- - tracked insertions
188
- - tracked deletions
189
- - accept or reject for the above
190
-
191
- Frozen preserve-only review scope:
192
-
193
- - multi-paragraph editable comment ranges
194
- - tracked moves
195
- - tracked formatting changes
196
- - structural table or list revisions beyond the supported authoring envelope
197
-
198
- ## 8. Preservation Boundary
199
-
200
- `src/preservation` owns the opaque fragment registry and preserved package-part manifest.
201
-
202
- Frozen opaque placeholder contract:
203
-
204
- ```ts
205
- type OpaqueInlineNode = {
206
- type: "opaque_inline";
207
- fragmentId: string;
208
- warningId: string;
209
- };
210
-
211
- type OpaqueBlockNode = {
212
- type: "opaque_block";
213
- fragmentId: string;
214
- warningId: string;
215
- };
216
-
217
- type OpaqueFragmentRecord = {
218
- fragmentId: string;
219
- payloadKind: "xml-subtree" | "package-part";
220
- payloadKey: string;
221
- featureClass: "preserve-only";
222
- lastKnownRange: DocRange;
223
- packagePartName?: string;
224
- relationshipId?: string;
225
- };
226
- ```
227
-
228
- Frozen preservation rule:
229
-
230
- - opaque placeholders are atomic leaf nodes in the canonical content tree
231
- - the actual XML or bytes live in preservation records, not inline in canonical content
232
- - the preserved package-part manifest records content type and relationship metadata keyed by `fragmentId` or package part name
233
- - partial edits inside opaque regions are forbidden
234
- - whole-node deletion requires an explicit destructive path and warning
235
-
236
- ## 9. Compatibility Boundary
237
-
238
- `src/validation` owns feature classification and compatibility reporting.
239
-
240
- Frozen taxonomy:
241
-
242
- - `supported-roundtrip`
243
- - `preserve-only`
244
- - `unsupported-fatal`
245
-
246
- Frozen report minimums:
247
-
248
- ```ts
249
- type CompatibilityReport = {
250
- reportVersion: number;
251
- featureEntries: FeatureEntry[];
252
- warnings: EditorWarning[];
253
- errors: EditorError[];
254
- blockExport: boolean;
255
- };
256
- ```
257
-
258
- Where:
259
-
260
- - `featureEntries` carry stable ids for classified features or regions
261
- - `warnings` and `errors` are host-visible projections
262
- - `blockExport` is the single export gate summary bit
263
-
264
- ## 10. IO Boundary
265
-
266
- `src/io` owns the package-first pipeline and is the only subsystem that translates between `.docx` and canonical state.
267
-
268
- Frozen internal modules:
269
-
270
- - `opc-reader`
271
- - `normalizer`
272
- - `canonicalizer`
273
- - `serializer`
274
- - `opc-writer`
275
-
276
- Frozen public boundary toward runtime:
277
-
278
- - import accepts `.docx` bytes and returns canonical state plus compatibility data
279
- - export accepts canonical state plus preservation data and returns `.docx` bytes
280
-
281
- Frozen prohibitions:
282
-
283
- - no HTML intermediary contract
284
- - no direct React participation in import or export
285
- - no runtime-to-UI back edge
286
-
287
- ## 11. Proof Surface Assignments By Wave
288
-
289
- | Component | Wave | Proof surface | Owner |
290
- | --- | --- | --- | --- |
291
- | canonical-document-model | Wave 2 | repo-land schema and serialization tests, position arithmetic tests, deterministic snapshot checks | A2 |
292
- | command-and-transaction-runtime | Wave 2 | repo-land command-dispatch tests, transaction remap tests, and runtime subscription tests | A2 |
293
- | react-editor-ui | Wave 2 | repo-land shell load or focus or ready smoke over the runtime external-store boundary | A4 |
294
- | canonical-document-model | Wave 3 | F01-F02 canonical snapshot stability and position remap checks through real text edits | A2 |
295
- | command-and-transaction-runtime | Wave 3 | F01-F02 undo or redo, remap, and selection consistency through committed transactions | A2 |
296
- | docx-import-and-normalization | Wave 3 | F01-F02 import fixtures for text, headings, whitespace, tabs, and hard breaks | A3 |
297
- | docx-export-and-serialization | Wave 3 | F01-F02 export or round-trip fixtures plus package integrity checks | A3 |
298
- | compatibility-and-word-validation | Wave 3 | repo-land compatibility-report skeleton tests and validator-contract smoke on F01-F02 | A3 |
299
- | react-editor-ui | Wave 3 | runtime-driven editing smoke tests and imperative-ref smoke tests on F01-F02 | A4 |
300
- | docx-import-and-normalization | Wave 4 | F03-F04/F07-F08 live supported lists, numbering, inline images, and hyperlinks plus preserve-only truth on F05-F06 tables | A3 |
301
- | compatibility-and-word-validation | Wave 4 | structural compatibility suite, feature-class assertions, and export-risk gating for F03-F08 | A3 |
302
- | comments-and-anchor-mapping | Wave 5 | F09-F10 comment fixtures and anchor-remap tests | A4 |
303
- | tracked-changes-and-review-actions | Wave 6 | F11-F14 revision fixtures and accept or reject tests | A4 |
304
- | unsupported-ooxml-preservation | Wave 7 | F15-F21 preservation fixtures, opaque-fragment survival tests, malformed-doc export-block checks | A3 |
305
-
306
- ## 12. Service Boundary
307
-
308
- | Service | Role | Frozen boundary |
309
- | --- | --- | --- |
310
- | `services/react-word-editor` | Internal Railway harness | Hosts `WordReviewEditor`; does not bypass the runtime by importing editor internals directly for mutation flows. |
311
- | `services/openxml-validator` | Internal validator service | Accepts `.docx` bytes and returns structured diagnostics; never becomes the primary transformation engine and never ships in the browser bundle. |
312
-
313
- ## 13. Change Control
314
-
315
- The following changes require a new explicit Wave decision before implementation agents act on them:
316
-
317
- - the global position model or size rules
318
- - the mutable-domain split of `content`, `review`, and `preservation`
319
- - the runtime or UI boundary that keeps React as a subscriber only
320
- - the three-class compatibility taxonomy
321
- - the opaque placeholder node kinds
322
- - the later-wave proof ownership table
@@ -1,323 +0,0 @@
1
- # Wave 1 OOXML, Preservation, And Fixture Contracts
2
-
3
- **Agent:** A3
4
- **Date:** 2026-03-25
5
- **Status:** ready-for-implementation
6
-
7
- ## Purpose
8
-
9
- This packet freezes the Wave 1 contract for:
10
-
11
- - `docx-import-and-normalization`
12
- - `docx-export-and-serialization`
13
- - `unsupported-ooxml-preservation`
14
- - `compatibility-and-word-validation`
15
-
16
- It converts the repo-wide compatibility promises into implementation-facing rules that later waves must satisfy with fixture-backed proof.
17
-
18
- ## Governing inputs
19
-
20
- This contract is downstream of:
21
-
22
- - [README.md](/home/coder/docx-react-component/README.md)
23
- - [docs/reference/repository-guidance.md](/home/coder/docx-react-component/docs/reference/repository-guidance.md)
24
- - [docs/plans/waves/design/wave-1-a1.md](/home/coder/docx-react-component/docs/plans/waves/design/wave-1-a1.md)
25
- - [docs/reference/ooxml-compliance.md](/home/coder/docx-react-component/docs/reference/ooxml-compliance.md)
26
- - [test/fixtures/docx/README.md](/home/coder/docx-react-component/test/fixtures/docx/README.md)
27
-
28
- If a later doc conflicts with A1 decisions D7-D12, this packet inherits A1.
29
-
30
- ## Non-negotiable contract
31
-
32
- - `.docx` is treated as an OPC package, not as `word/document.xml` alone.
33
- - Import and export stay package-first and unidirectional.
34
- - Supported editing is only for features that satisfy `supported-roundtrip`.
35
- - Unsupported but preservable content is preserved, never silently discarded.
36
- - Opaque preserved content is represented as atomic placeholders in canonical content.
37
- - The Microsoft Open XML SDK is validation-only and never the runtime transformation engine.
38
- - Word reopen behavior is the final compatibility standard. SDK validation is necessary but insufficient.
39
-
40
- ## Feature classes
41
-
42
- Wave 1 freezes exactly three feature classes:
43
-
44
- - `supported-roundtrip`
45
- - `preserve-only`
46
- - `unsupported-fatal`
47
-
48
- `supported-import-only` and `supported-export-only` are not valid v1 classes. If a feature cannot safely survive import, supported editing, export, and Word reopen, it must be classified as `preserve-only` or `unsupported-fatal`.
49
-
50
- ## Package-preservation model
51
-
52
- ### Owned package surfaces
53
-
54
- The editor may regenerate only parts and relationships it explicitly owns for the active supported feature set, including where applicable:
55
-
56
- - `word/document.xml`
57
- - editor-owned supporting parts such as comments, numbering, styles, and media relationships when the editor materially changes those surfaces
58
- - package metadata entries that must be updated to keep the package valid after owned changes
59
-
60
- ### Preserved package surfaces
61
-
62
- The editor must preserve and reattach unchanged package data for any non-owned or not-yet-canonicalized surface, including:
63
-
64
- - unknown parts
65
- - unknown relationships
66
- - unknown content types
67
- - headers and footers
68
- - footnotes and endnotes
69
- - fields
70
- - SDTs
71
- - custom XML wrappers and custom XML parts
72
- - `mc:AlternateContent`
73
- - ignorable namespaces and unknown markup extensions
74
- - embedded objects and unsupported drawings
75
-
76
- ### Opaque fragment contract
77
-
78
- Unsupported inline or block content that remains preservable must become:
79
-
80
- - an `opaque_inline` or `opaque_block` placeholder in canonical content
81
- - a preservation record keyed by `fragmentId`
82
- - a warning-bearing binding to the last known canonical range
83
-
84
- The preservation record must retain enough original material to reattach the feature on export, such as:
85
-
86
- - original XML subtree
87
- - original package bytes
88
- - source part path and relationship context
89
- - feature classification
90
- - `lastKnownRange`
91
-
92
- Wave 1 freezes the rule that opaque placeholders are atomic. Later waves may not partially edit, split, or normalize inside them.
93
-
94
- ## Import contract
95
-
96
- Import must follow:
97
-
98
- `.docx bytes -> OPC reader -> OOXML normalizer -> canonicalizer -> runtime load`
99
-
100
- ### Import obligations
101
-
102
- - Read the package graph, including content types and relationships, before canonicalization decisions.
103
- - Normalize supported OOXML into canonical content, review, and preservation surfaces without routing through HTML.
104
- - Preserve unsupported but intact OOXML as package-level records or opaque fragments.
105
- - Emit stable diagnostics for every preserve-only and unsupported-fatal condition.
106
- - Fail safely on malformed packages that the editor cannot preserve or reason about safely.
107
-
108
- ### Import outcomes by class
109
-
110
- For `supported-roundtrip`, import must:
111
-
112
- - parse the feature semantically
113
- - materialize it into canonical state
114
- - preserve enough source metadata to serialize back safely
115
-
116
- For `preserve-only`, import must:
117
-
118
- - retain the source XML or bytes
119
- - bind the preserved unit to either package manifest state or an atomic placeholder
120
- - mark the feature locked for direct editing
121
- - emit any warning needed to explain downstream risk
122
-
123
- For `unsupported-fatal`, import must:
124
-
125
- - emit an error with export-block semantics
126
- - prevent the runtime from presenting the document as normally editable
127
- - avoid repair guesses that could hide corruption
128
-
129
- ## Export contract
130
-
131
- Export must follow:
132
-
133
- `canonical state -> serializer -> OPC writer -> .docx bytes`
134
-
135
- ### Export obligations
136
-
137
- - Serialize only from canonical state plus preservation records.
138
- - Regenerate only editor-owned parts.
139
- - Reattach preserved parts, relationships, markup-compatibility structures, and opaque fragments.
140
- - Maintain package integrity for `[Content_Types].xml`, relationship graphs, and referenced part targets.
141
- - Surface export-block conditions before producing a document that would violate the compatibility contract.
142
-
143
- ### Export outcomes by class
144
-
145
- For `supported-roundtrip`, export must:
146
-
147
- - serialize the feature back as valid OOXML
148
- - keep relationships and identifiers coherent
149
- - support Word reopen without repair prompts for the proven fixture set
150
-
151
- For `preserve-only`, export must:
152
-
153
- - re-emit preserved material without semantically rewriting it
154
- - keep the feature locked or outside editable scope in the runtime
155
- - warn before destructive actions that would delete or invalidate the preserved unit
156
-
157
- For `unsupported-fatal`, export must:
158
-
159
- - block export rather than emit a guessed or flattened representation
160
- - return actionable diagnostics
161
-
162
- ## Preserve, lock, warn, block, fail matrix
163
-
164
- Wave 1 freezes the editor response model below.
165
-
166
- | Condition | Required behavior |
167
- | --- | --- |
168
- | Feature is `supported-roundtrip` and inside proven editing scope | Import semantically, allow editing, serialize natively, validate through fixture proof. |
169
- | Feature is `preserve-only` and does not intersect edits | Preserve and reattach without user-visible mutation of the preserved payload. |
170
- | Feature is `preserve-only` and is represented in the canonical story | Lock direct editing inside the feature; expose it only as an atomic placeholder. |
171
- | User action would delete a preserve-only opaque unit | Warn explicitly and require destructive confirmation; never treat as a silent delete. |
172
- | User action would require semantic rewriting of preserve-only content | Block the action or keep the document read-only for that region. |
173
- | Package or OOXML is malformed but still diagnosable | Fail safely with diagnostics and export blocked. |
174
- | Package or OOXML prevents trustworthy preservation | Fail import into read-only diagnostics mode or reject load; do not continue as editable. |
175
-
176
- ## Compatibility and validation contract
177
-
178
- `CompatibilityReport` is a repo-owned TypeScript surface, not an SDK mirror. Wave 1 freezes the following obligations:
179
-
180
- - stable feature entries for supported and preserve-only findings
181
- - warnings for detachments, destructive-risk edits, and preserve-only constraints
182
- - errors for malformed packages, invalid relationships, and export blockers
183
- - `blockExport` as the authoritative export gate
184
-
185
- Validation layers remain:
186
-
187
- 1. repo-owned structural and semantic checks in TypeScript
188
- 2. Open XML SDK validation in CI and internal services
189
- 3. manual Word reopen certification for representative fixtures
190
-
191
- The SDK may validate the package, parts, or elements, but it does not decide runtime transformations and does not ship in the browser bundle.
192
-
193
- ## Feature-class baseline for v1
194
-
195
- ### `supported-roundtrip`
196
-
197
- - paragraphs, runs, and text containers
198
- - significant whitespace, tabs, and hard line breaks
199
- - paragraph styles and heading style references
200
- - nested lists and restart numbering
201
- - inline images
202
- - hyperlinks
203
- - single-paragraph comments and threads within supported authoring scope
204
- - tracked insertions and deletions with accept or reject flows
205
-
206
- ### `preserve-only`
207
-
208
- - body-level tables and merged-cell tables on the current live runtime path
209
- - multi-paragraph comment ranges
210
- - tracked moves
211
- - formatting revisions
212
- - structural table or list revisions
213
- - sections and section properties
214
- - headers and footers
215
- - footnotes and endnotes
216
- - fields
217
- - SDTs
218
- - custom XML wrappers and custom XML parts
219
- - `altChunk`
220
- - embedded objects
221
- - floating or unsupported drawings
222
- - `mc:AlternateContent`
223
- - unknown OOXML in document parts
224
- - unknown package parts and relationships
225
-
226
- ### `unsupported-fatal`
227
-
228
- - malformed XML the importer cannot preserve safely
229
- - broken package graphs that prevent trustworthy reattachment
230
- - other package states the editor cannot validate or preserve without guesswork
231
-
232
- ## Fixture proof program
233
-
234
- Wave 1 freezes F01-F21 as the minimum compatibility corpus.
235
-
236
- | Fixture | Primary contract target | Feature class focus | Proof-bearing wave(s) |
237
- | --- | --- | --- | --- |
238
- | F01 | Basic contract skeleton | `supported-roundtrip` text and whitespace baseline | Wave 3, Wave 10 |
239
- | F02 | Headings and styles contract | `supported-roundtrip` styles and headings baseline | Wave 3, Wave 10 |
240
- | F03 | Legal outline numbering | `supported-roundtrip` nested numbering | Wave 5, Wave 10 |
241
- | F04 | Restart numbering schedules | `supported-roundtrip` numbering restart and overrides | Wave 5, Wave 10 |
242
- | F05 | Table-heavy agreement | `preserve-only` table/package survival until first-class tables land | Wave 10, Wave 12 if promoted |
243
- | F06 | Merged-cells signature table | `preserve-only` merged-cell/package survival until first-class tables land | Wave 10, Wave 12 if promoted |
244
- | F07 | Inline images exhibit | `supported-roundtrip` media relationships | Wave 5, Wave 10 |
245
- | F08 | Hyperlinks exhibit list | `supported-roundtrip` hyperlinks and rel integrity | Wave 3, Wave 10 |
246
- | F09 | Comments anchored single paragraph | `supported-roundtrip` comment anchors | Wave 5, Wave 10 |
247
- | F10 | Threaded comments and resolve | `supported-roundtrip` comment threads and resolution metadata | Wave 5, Wave 10 |
248
- | F11 | Redlines basic | `supported-roundtrip` tracked insertions and deletions | Wave 6, Wave 10 |
249
- | F12 | Redlines paragraph joins/splits | `supported-roundtrip` revision boundary behavior | Wave 6, Wave 10 |
250
- | F13 | Comments on deleted text | supported behavior plus review-edge diagnostics | Wave 6, Wave 10 |
251
- | F14 | Revisions in tables and lists | `preserve-only` structural revisions | Wave 6, Wave 10 |
252
- | F15 | Sections + headers/footers | `preserve-only` out-of-band story survival | Wave 7, Wave 10 |
253
- | F16 | Footnotes and endnotes | `preserve-only` notes survival | Wave 7, Wave 10 |
254
- | F17 | Fields and TOC | `preserve-only` fields survival | Wave 7, Wave 10 |
255
- | F18 | Content controls template | `preserve-only` SDT survival and locking | Wave 7, Wave 10 |
256
- | F19 | Custom XML doc assembly | `preserve-only` custom XML survival and blocking rules | Wave 7, Wave 10 |
257
- | F20 | Unknown OOXML and AlternateContent | `preserve-only` opaque OOXML and markup compatibility preservation | Wave 7, Wave 10 |
258
- | F21 | Malformed/broken docx | `unsupported-fatal` fail-safe import and export blocking | Wave 7, Wave 10 |
259
-
260
- ## Later-wave obligations frozen by this packet
261
-
262
- ### Wave 3
263
-
264
- - Prove F01-F02 through fixture-backed import or export checks.
265
- - Land the first `CompatibilityReport` contract implementation.
266
- - Demonstrate package validation handoff to the validator service without pulling the SDK into runtime code.
267
-
268
- ### Wave 4
269
-
270
- - Land the live shell and compatibility substrate without overclaiming structural baseline proof.
271
-
272
- ### Wave 5
273
-
274
- - Prove F03-F04, F07-F10, and keep F05-F06 explicit as preserve-only table/package fixtures.
275
- - Show structural compatibility checks for supported-roundtrip list, image, hyperlink, and supported comment surfaces without overclaiming first-class table support.
276
-
277
- ### Deferred Wave 12
278
-
279
- - Promote tables only after package-backed `import -> runtime edit -> export -> reload` proof exists on `F05` and `F06`.
280
- - Require mounted editor interaction proof, compatibility taxonomy proof, and linked Word reopen notes before tables re-enter `supported-roundtrip`.
281
-
282
- ### Wave 6
283
-
284
- - Prove F11-F14.
285
- - Confirm that supported revision flows and preserve-only structural revisions do not drift across taxonomy boundaries.
286
-
287
- ### Wave 7
288
-
289
- - Prove F15-F21.
290
- - Include survival checks for preserve-only package parts and explicit export blocking for malformed packages.
291
-
292
- ### Wave 8
293
-
294
- - Prove the internal harness upload and validation path without widening the frozen F01-F21 taxonomy.
295
-
296
- ### Wave 9
297
-
298
- - Prove selected end-to-end fixture and scenario runs on Railway against the same OOXML taxonomy and validator rules.
299
-
300
- ### Wave 10
301
-
302
- - Re-run the full F01-F21 regression and Word certification bundle as the authoritative v1 closure proof.
303
-
304
- ## Interface impacts
305
-
306
- | Surface | Owner | Exact impact |
307
- | --- | --- | --- |
308
- | `src/io/*` | A3 | Keep import and export package-first with no HTML intermediary and no UI dependency. |
309
- | `src/preservation/store.ts` | A3 | Preserve fragment records with `fragmentId`, source payload, `lastKnownRange`, and feature-class metadata. |
310
- | `src/validation/compatibility-report.ts` | A3 | Expose stable feature entries, warnings, errors, and `blockExport`. |
311
- | `docs/reference/ooxml-compliance.md` | A3 | Reflect the 3-class taxonomy and validation-only SDK policy. |
312
- | `test/fixtures/docx/README.md` | A3 | Freeze fixture IDs F01-F21, their class focus, and proof-bearing waves. |
313
-
314
- ## Proof expectations for this wave
315
-
316
- Wave 1 only freezes the contract. It does not claim runtime implementation of import, export, preservation, or validation logic.
317
-
318
- Durable proof for A3 in Wave 1 is:
319
-
320
- - landed owned docs
321
- - exact fixture-to-wave proof mapping
322
- - exact preserve/lock/warn/block/fail rules
323
- - explicit SDK policy and package-first boundaries