@beyondwork/docx-react-component 1.0.0

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 (690) hide show
  1. package/.codex/config.toml +5 -0
  2. package/.corepack/v1/pnpm/10.30.3/.corepack +1 -0
  3. package/.corepack/v1/pnpm/10.30.3/LICENSE +22 -0
  4. package/.corepack/v1/pnpm/10.30.3/README.md +240 -0
  5. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +6 -0
  6. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +5 -0
  7. package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +195400 -0
  8. package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +2 -0
  9. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
  10. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
  11. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
  12. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
  13. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +31 -0
  14. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +22 -0
  15. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +193 -0
  16. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +27 -0
  17. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
  18. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
  19. package/.corepack/v1/pnpm/10.30.3/dist/worker.js +10119 -0
  20. package/.corepack/v1/pnpm/10.30.3/package.json +192 -0
  21. package/.cursor/mcp.json +7 -0
  22. package/.github/workflows/ci.yml +35 -0
  23. package/.mcp.json +7 -0
  24. package/.openclaw/workspace-state.json +4 -0
  25. package/.pnpmrc.json +1 -0
  26. package/.wave-launch.sh +7 -0
  27. package/.workspace-marker +1 -0
  28. package/AGENTS.md +78 -0
  29. package/CHANGELOG.md +177 -0
  30. package/DESIGN.md +929 -0
  31. package/HEARTBEAT.md +7 -0
  32. package/IDENTITY.md +23 -0
  33. package/LICENSE.md +31 -0
  34. package/README.md +180 -0
  35. package/SOUL.md +36 -0
  36. package/TOOLS.md +40 -0
  37. package/USER.md +17 -0
  38. package/docs/README.md +107 -0
  39. package/docs/agents/wave-cont-eval-role.md +36 -0
  40. package/docs/agents/wave-cont-qa-role.md +52 -0
  41. package/docs/agents/wave-deploy-verifier-role.md +34 -0
  42. package/docs/agents/wave-design-role.md +47 -0
  43. package/docs/agents/wave-documentation-role.md +34 -0
  44. package/docs/agents/wave-infra-role.md +34 -0
  45. package/docs/agents/wave-integration-role.md +37 -0
  46. package/docs/agents/wave-launcher-role.md +41 -0
  47. package/docs/agents/wave-orchestrator-role.md +52 -0
  48. package/docs/agents/wave-planner-role.md +39 -0
  49. package/docs/agents/wave-security-role.md +40 -0
  50. package/docs/architecture/docx/README.md +10 -0
  51. package/docs/architecture/future/README.md +8 -0
  52. package/docs/architecture/ooxml-upgrade-analysis.md +134 -0
  53. package/docs/architecture/platform/shared-openxml-editor-platform.md +153 -0
  54. package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +187 -0
  55. package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +150 -0
  56. package/docs/comment-redline-overview.md +350 -0
  57. package/docs/concepts/context7-vs-skills.md +118 -0
  58. package/docs/concepts/operating-modes.md +91 -0
  59. package/docs/concepts/runtime-agnostic-orchestration.md +111 -0
  60. package/docs/concepts/what-is-a-wave.md +217 -0
  61. package/docs/context7/bundles.json +222 -0
  62. package/docs/context7/planner-agent/README.md +28 -0
  63. package/docs/context7/planner-agent/manifest.json +83 -0
  64. package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +3283 -0
  65. package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +1699 -0
  66. package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +2251 -0
  67. package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +1729 -0
  68. package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +3747 -0
  69. package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +1675 -0
  70. package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +1173 -0
  71. package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +5211 -0
  72. package/docs/context7/planner-agent/topics/planning-and-orchestration.md +24 -0
  73. package/docs/evals/arm-templates/README.md +13 -0
  74. package/docs/evals/arm-templates/full-wave.json +15 -0
  75. package/docs/evals/arm-templates/single-agent.json +15 -0
  76. package/docs/evals/benchmark-catalog.json +670 -0
  77. package/docs/evals/cases/README.md +47 -0
  78. package/docs/evals/cases/wave-blackboard-inbox-targeting.json +73 -0
  79. package/docs/evals/cases/wave-contradiction-conflict.json +104 -0
  80. package/docs/evals/cases/wave-expert-routing-preservation.json +69 -0
  81. package/docs/evals/cases/wave-hidden-profile-private-evidence.json +81 -0
  82. package/docs/evals/cases/wave-premature-closure-guard.json +71 -0
  83. package/docs/evals/cases/wave-silo-cross-agent-state.json +77 -0
  84. package/docs/evals/cases/wave-simultaneous-lockstep.json +92 -0
  85. package/docs/evals/external-benchmarks.json +85 -0
  86. package/docs/evals/external-command-config.sample.json +9 -0
  87. package/docs/evals/external-command-config.swe-bench-pro.json +8 -0
  88. package/docs/evals/pilots/README.md +47 -0
  89. package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +64 -0
  90. package/docs/evals/pilots/swe-bench-pro-public-pilot.json +111 -0
  91. package/docs/evals/wave-benchmark-program.md +302 -0
  92. package/docs/guides/planner.md +220 -0
  93. package/docs/guides/recommendations-0.8.9.md +133 -0
  94. package/docs/guides/signal-wrappers.md +165 -0
  95. package/docs/guides/terminal-surfaces.md +96 -0
  96. package/docs/image copy.png +0 -0
  97. package/docs/image.png +0 -0
  98. package/docs/images/image.png +0 -0
  99. package/docs/legal-feedback-architecture.md +498 -0
  100. package/docs/plans/component-cutover-matrix.json +1072 -0
  101. package/docs/plans/component-cutover-matrix.md +307 -0
  102. package/docs/plans/context7-wave-orchestrator.md +155 -0
  103. package/docs/plans/current-state.md +198 -0
  104. package/docs/plans/docx/README.md +9 -0
  105. package/docs/plans/examples/wave-benchmark-improvement.md +108 -0
  106. package/docs/plans/examples/wave-example-live-proof.md +435 -0
  107. package/docs/plans/master-plan.md +224 -0
  108. package/docs/plans/migration.md +538 -0
  109. package/docs/plans/operations/README.md +7 -0
  110. package/docs/plans/operations/wave-10-word-certification.md +87 -0
  111. package/docs/plans/operations/wave-8-railway-staging.md +153 -0
  112. package/docs/plans/operations/wave-9-manual-certification.md +73 -0
  113. package/docs/plans/platform/README.md +9 -0
  114. package/docs/plans/reference/legal-checklist-coverage.md +258 -0
  115. package/docs/plans/wave-orchestrator.md +423 -0
  116. package/docs/plans/waves/README.md +75 -0
  117. package/docs/plans/waves/completed/wave-0.md +195 -0
  118. package/docs/plans/waves/completed/wave-1.md +379 -0
  119. package/docs/plans/waves/completed/wave-10.md +670 -0
  120. package/docs/plans/waves/completed/wave-11.md +335 -0
  121. package/docs/plans/waves/completed/wave-12.md +417 -0
  122. package/docs/plans/waves/completed/wave-13.md +316 -0
  123. package/docs/plans/waves/completed/wave-14.md +319 -0
  124. package/docs/plans/waves/completed/wave-15.md +321 -0
  125. package/docs/plans/waves/completed/wave-16.md +316 -0
  126. package/docs/plans/waves/completed/wave-17.md +331 -0
  127. package/docs/plans/waves/completed/wave-18.md +328 -0
  128. package/docs/plans/waves/completed/wave-2.md +438 -0
  129. package/docs/plans/waves/completed/wave-3.md +435 -0
  130. package/docs/plans/waves/completed/wave-4.md +430 -0
  131. package/docs/plans/waves/completed/wave-5.md +430 -0
  132. package/docs/plans/waves/completed/wave-6.md +430 -0
  133. package/docs/plans/waves/completed/wave-7.md +526 -0
  134. package/docs/plans/waves/completed/wave-8.md +596 -0
  135. package/docs/plans/waves/completed/wave-9.md +552 -0
  136. package/docs/plans/waves/deferred/README.md +14 -0
  137. package/docs/plans/waves/deferred/encrypted-intake-contracts.md +282 -0
  138. package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +308 -0
  139. package/docs/plans/waves/deferred/wave-encrypted-intake.md +451 -0
  140. package/docs/plans/waves/design/README.md +5 -0
  141. package/docs/plans/waves/design/wave-1-a1.md +309 -0
  142. package/docs/plans/waves/reviews/README.md +5 -0
  143. package/docs/plans/waves/reviews/wave-0-cont-qa.md +151 -0
  144. package/docs/plans/waves/reviews/wave-1-cont-qa.md +46 -0
  145. package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +51 -0
  146. package/docs/plans/waves/reviews/wave-10-cont-qa.md +24 -0
  147. package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +46 -0
  148. package/docs/plans/waves/reviews/wave-10-performance-signoff.md +55 -0
  149. package/docs/plans/waves/reviews/wave-10-regression-proof.md +23 -0
  150. package/docs/plans/waves/reviews/wave-10-release-audit.md +31 -0
  151. package/docs/plans/waves/reviews/wave-10-service-proof.md +83 -0
  152. package/docs/plans/waves/reviews/wave-10-word-certification.md +31 -0
  153. package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +277 -0
  154. package/docs/plans/waves/reviews/wave-18-cont-qa.md +255 -0
  155. package/docs/plans/waves/reviews/wave-18-parity-proof.md +271 -0
  156. package/docs/plans/waves/reviews/wave-19-cont-qa.md +59 -0
  157. package/docs/plans/waves/reviews/wave-2-cont-qa.md +72 -0
  158. package/docs/plans/waves/reviews/wave-20-cont-qa.md +60 -0
  159. package/docs/plans/waves/reviews/wave-25-cont-qa.md +48 -0
  160. package/docs/plans/waves/reviews/wave-28-cont-qa.md +46 -0
  161. package/docs/plans/waves/reviews/wave-29-cont-qa.md +53 -0
  162. package/docs/plans/waves/reviews/wave-3-cont-qa.md +53 -0
  163. package/docs/plans/waves/reviews/wave-3-core-proof.md +77 -0
  164. package/docs/plans/waves/reviews/wave-3-validator-proof.md +73 -0
  165. package/docs/plans/waves/reviews/wave-32-cont-qa.md +43 -0
  166. package/docs/plans/waves/reviews/wave-33-cont-qa.md +526 -0
  167. package/docs/plans/waves/reviews/wave-34-cont-qa.md +100 -0
  168. package/docs/plans/waves/reviews/wave-35-cont-qa.md +145 -0
  169. package/docs/plans/waves/reviews/wave-4-cont-qa.md +47 -0
  170. package/docs/plans/waves/reviews/wave-4-structure-proof.md +69 -0
  171. package/docs/plans/waves/reviews/wave-5-comment-proof.md +158 -0
  172. package/docs/plans/waves/reviews/wave-5-cont-qa.md +68 -0
  173. package/docs/plans/waves/reviews/wave-6-cont-qa.md +416 -0
  174. package/docs/plans/waves/reviews/wave-6-redline-proof.md +130 -0
  175. package/docs/plans/waves/reviews/wave-7-cont-qa.md +82 -0
  176. package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +85 -0
  177. package/docs/plans/waves/reviews/wave-7-preservation-proof.md +119 -0
  178. package/docs/plans/waves/reviews/wave-7-trust-ux.md +87 -0
  179. package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +128 -0
  180. package/docs/plans/waves/reviews/wave-8-cont-qa.md +92 -0
  181. package/docs/plans/waves/reviews/wave-8-live-proof.md +140 -0
  182. package/docs/plans/waves/reviews/wave-8-security.md +47 -0
  183. package/docs/plans/waves/reviews/wave-9-editor-embedding.md +39 -0
  184. package/docs/plans/waves/reviews/wave-9-fixture-runner.md +56 -0
  185. package/docs/plans/waves/reviews/wave-9-live-proof.md +105 -0
  186. package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +152 -0
  187. package/docs/plans/waves/specs/README.md +5 -0
  188. package/docs/plans/waves/specs/wave-1-component-boundaries.md +322 -0
  189. package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +323 -0
  190. package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +339 -0
  191. package/docs/plans/waves/specs/wave-1-runtime-contracts.md +509 -0
  192. package/docs/plans/waves/wave-19.md +341 -0
  193. package/docs/plans/waves/wave-20.md +308 -0
  194. package/docs/plans/waves/wave-21.md +289 -0
  195. package/docs/plans/waves/wave-22.md +221 -0
  196. package/docs/plans/waves/wave-23.md +295 -0
  197. package/docs/plans/waves/wave-24.md +286 -0
  198. package/docs/plans/waves/wave-25.md +313 -0
  199. package/docs/plans/waves/wave-26.md +300 -0
  200. package/docs/plans/waves/wave-27.md +299 -0
  201. package/docs/plans/waves/wave-28.md +368 -0
  202. package/docs/plans/waves/wave-29.md +303 -0
  203. package/docs/plans/waves/wave-30.md +307 -0
  204. package/docs/plans/waves/wave-31.md +231 -0
  205. package/docs/plans/waves/wave-32.md +152 -0
  206. package/docs/plans/waves/wave-33.md +147 -0
  207. package/docs/plans/waves/wave-34.md +148 -0
  208. package/docs/plans/waves/wave-35.md +141 -0
  209. package/docs/plans/waves/wave-36.md +146 -0
  210. package/docs/plans/xlsx/README.md +14 -0
  211. package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +126 -0
  212. package/docs/reference/cli-reference.md +600 -0
  213. package/docs/reference/coordination-and-closure.md +487 -0
  214. package/docs/reference/deep-research-report (15).md +25 -0
  215. package/docs/reference/docx/README.md +10 -0
  216. package/docs/reference/legal-checklist.md +445 -0
  217. package/docs/reference/live-proof-waves.md +199 -0
  218. package/docs/reference/ooxml-compliance.md +129 -0
  219. package/docs/reference/ooxml-feature-parity-matrix.md +172 -0
  220. package/docs/reference/platform/shared-ooxml-platform-guidance.md +77 -0
  221. package/docs/reference/prototype-agent-prompt-legal-fidelity.md +155 -0
  222. package/docs/reference/public-api.md +456 -0
  223. package/docs/reference/repository-guidance.md +58 -0
  224. package/docs/reference/runtime-config/README.md +182 -0
  225. package/docs/reference/runtime-config/claude.md +110 -0
  226. package/docs/reference/runtime-config/codex.md +82 -0
  227. package/docs/reference/runtime-config/opencode.md +93 -0
  228. package/docs/reference/sample-waves.md +105 -0
  229. package/docs/reference/skills.md +237 -0
  230. package/docs/reference/templates/AGENTS.md +78 -0
  231. package/docs/reference/templates/HEARTBEAT.md +7 -0
  232. package/docs/reference/templates/IDENTITY.md +23 -0
  233. package/docs/reference/templates/SOUL.md +36 -0
  234. package/docs/reference/templates/TOOLS.md +40 -0
  235. package/docs/reference/templates/USER.md +17 -0
  236. package/docs/reference/wave-control.md +184 -0
  237. package/docs/reference/wave-planning-lessons.md +167 -0
  238. package/docs/reference/word-review-editor-frontend-architecture.md +479 -0
  239. package/docs/reference/word-review-editor-ux-guide.md +253 -0
  240. package/docs/reference/xlsx/xlsx-ooxml-compliance.md +137 -0
  241. package/docs/research/agent-context-sources.md +178 -0
  242. package/docs/research/coordination-failure-review.md +290 -0
  243. package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +2317 -0
  244. package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +219 -0
  245. package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +1112 -0
  246. package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +751 -0
  247. package/docs/research/xlsx/raw/README.md +13 -0
  248. package/docs/roadmap.md +174 -0
  249. package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +677 -0
  250. package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +274 -0
  251. package/docs/xlsx-react/README.md +38 -0
  252. package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +621 -0
  253. package/docs/xlsx-react/canonical-workbook-model-and-commands.md +948 -0
  254. package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +228 -0
  255. package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +809 -0
  256. package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +537 -0
  257. package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +520 -0
  258. package/docs/xlsx-react/xlsx-editor-research-pack.md +871 -0
  259. package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +436 -0
  260. package/docs/xlsx-react/xlsx-ooxml-compliance.md +320 -0
  261. package/examples/README.md +16 -0
  262. package/memory/MEMORY.md +24 -0
  263. package/package.json +63 -0
  264. package/pnpm-workspace.yaml +4 -0
  265. package/scripts/check-no-authored-js.sh +13 -0
  266. package/scripts/context7-api-check.sh +65 -0
  267. package/scripts/context7-export-env.sh +42 -0
  268. package/scripts/run-context7-mcp.sh +8 -0
  269. package/scripts/run-workspace-tests.sh +15 -0
  270. package/scripts/start-wave-10-local.sh +189 -0
  271. package/scripts/wave-agent-attach.sh +47 -0
  272. package/scripts/wave-auto-answer.sh +118 -0
  273. package/scripts/wave-dashboard-attach.sh +13 -0
  274. package/scripts/wave-launch.sh +273 -0
  275. package/scripts/wave-overnight-supervisor.sh +145 -0
  276. package/scripts/wave-status.sh +379 -0
  277. package/scripts/wave-watch.sh +231 -0
  278. package/services/README.md +17 -0
  279. package/services/openxml-validator/Dockerfile +29 -0
  280. package/services/openxml-validator/OpenXmlValidator.Api.csproj +12 -0
  281. package/services/openxml-validator/Program.cs +436 -0
  282. package/services/openxml-validator/README.md +152 -0
  283. package/services/openxml-validator/railway.json +16 -0
  284. package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +318 -0
  285. package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +1302 -0
  286. package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +546 -0
  287. package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +146 -0
  288. package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +2 -0
  289. package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +818 -0
  290. package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +229 -0
  291. package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +121 -0
  292. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +21 -0
  293. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +1 -0
  294. package/services/react-word-editor/Dockerfile +26 -0
  295. package/services/react-word-editor/README.md +254 -0
  296. package/services/react-word-editor/app/api/certification/route.ts +79 -0
  297. package/services/react-word-editor/app/api/demo-sessions/route.ts +109 -0
  298. package/services/react-word-editor/app/api/deploy-health/route.ts +23 -0
  299. package/services/react-word-editor/app/api/exports/[exportId]/route.ts +34 -0
  300. package/services/react-word-editor/app/api/exports/route.ts +81 -0
  301. package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +100 -0
  302. package/services/react-word-editor/app/api/health/route.ts +70 -0
  303. package/services/react-word-editor/app/api/runs/[runId]/route.ts +36 -0
  304. package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +85 -0
  305. package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +199 -0
  306. package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +45 -0
  307. package/services/react-word-editor/app/api/uploads/route.ts +70 -0
  308. package/services/react-word-editor/app/api/validate/route.ts +310 -0
  309. package/services/react-word-editor/app/certification/[runId]/page.tsx +14 -0
  310. package/services/react-word-editor/app/certification/page.tsx +32 -0
  311. package/services/react-word-editor/app/dashboard/page.tsx +7 -0
  312. package/services/react-word-editor/app/demo/page.tsx +30 -0
  313. package/services/react-word-editor/app/demo/prototype-client.tsx +1080 -0
  314. package/services/react-word-editor/app/editor/[sessionId]/page.tsx +33 -0
  315. package/services/react-word-editor/app/fixtures/page.tsx +7 -0
  316. package/services/react-word-editor/app/globals.css +121 -0
  317. package/services/react-word-editor/app/layout.tsx +32 -0
  318. package/services/react-word-editor/app/page.tsx +30 -0
  319. package/services/react-word-editor/app/runs/[runId]/page.tsx +34 -0
  320. package/services/react-word-editor/app/wave-10-word-review/page.tsx +7 -0
  321. package/services/react-word-editor/components/harness-control-bar.tsx +289 -0
  322. package/services/react-word-editor/components/harness-editor-session-client.tsx +1214 -0
  323. package/services/react-word-editor/components/harness-workspace-page.tsx +715 -0
  324. package/services/react-word-editor/components/reduced-motion-toggle.tsx +79 -0
  325. package/services/react-word-editor/components/workspace-certification-panel.tsx +307 -0
  326. package/services/react-word-editor/lib/certification-bundle.ts +796 -0
  327. package/services/react-word-editor/lib/certification-store.ts +661 -0
  328. package/services/react-word-editor/lib/demo-fixtures.test.mjs +195 -0
  329. package/services/react-word-editor/lib/demo-fixtures.ts +1519 -0
  330. package/services/react-word-editor/lib/editor-session-summary.test.mjs +68 -0
  331. package/services/react-word-editor/lib/editor-session-summary.ts +14 -0
  332. package/services/react-word-editor/lib/editor-session.ts +228 -0
  333. package/services/react-word-editor/lib/exports-route.test.mjs +32 -0
  334. package/services/react-word-editor/lib/harness-client.ts +347 -0
  335. package/services/react-word-editor/lib/harness-config.json +30 -0
  336. package/services/react-word-editor/lib/harness-config.test.mjs +31 -0
  337. package/services/react-word-editor/lib/harness-config.ts +21 -0
  338. package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +220 -0
  339. package/services/react-word-editor/lib/harness-editor-datastore.ts +161 -0
  340. package/services/react-word-editor/lib/private-mode.test.mjs +42 -0
  341. package/services/react-word-editor/lib/private-mode.ts +61 -0
  342. package/services/react-word-editor/lib/regression-report.test.mjs +352 -0
  343. package/services/react-word-editor/lib/regression-report.ts +896 -0
  344. package/services/react-word-editor/lib/run-artifacts.ts +934 -0
  345. package/services/react-word-editor/lib/run-history.ts +755 -0
  346. package/services/react-word-editor/lib/scenario-artifacts.test.mjs +41 -0
  347. package/services/react-word-editor/lib/scenario-artifacts.ts +44 -0
  348. package/services/react-word-editor/lib/storage.ts +953 -0
  349. package/services/react-word-editor/lib/validator-client.test.mjs +54 -0
  350. package/services/react-word-editor/lib/validator-client.ts +95 -0
  351. package/services/react-word-editor/lib/workspace-navigation.ts +79 -0
  352. package/services/react-word-editor/middleware.ts +35 -0
  353. package/services/react-word-editor/next-env.d.ts +6 -0
  354. package/services/react-word-editor/next.config.mjs +15 -0
  355. package/services/react-word-editor/package.json +38 -0
  356. package/services/react-word-editor/postcss.config.mjs +8 -0
  357. package/services/react-word-editor/railway.json +21 -0
  358. package/services/react-word-editor/scripts/wave-10-certification.mjs +101 -0
  359. package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +911 -0
  360. package/services/react-word-editor/tsconfig.json +39 -0
  361. package/services/react-word-editor/tsconfig.tsbuildinfo +1 -0
  362. package/skills/README.md +48 -0
  363. package/skills/domain-docx-compatibility/SKILL.md +44 -0
  364. package/skills/domain-docx-compatibility/skill.json +19 -0
  365. package/skills/domain-editor-architecture/SKILL.md +49 -0
  366. package/skills/domain-editor-architecture/skill.json +19 -0
  367. package/skills/domain-legal-review/SKILL.md +39 -0
  368. package/skills/domain-legal-review/skill.json +19 -0
  369. package/skills/provider-aws/SKILL.md +117 -0
  370. package/skills/provider-aws/adapters/claude.md +1 -0
  371. package/skills/provider-aws/adapters/codex.md +1 -0
  372. package/skills/provider-aws/references/service-verification.md +39 -0
  373. package/skills/provider-aws/skill.json +54 -0
  374. package/skills/provider-custom-deploy/SKILL.md +64 -0
  375. package/skills/provider-custom-deploy/skill.json +50 -0
  376. package/skills/provider-docker-compose/SKILL.md +96 -0
  377. package/skills/provider-docker-compose/adapters/local.md +1 -0
  378. package/skills/provider-docker-compose/skill.json +53 -0
  379. package/skills/provider-github-release/SKILL.md +121 -0
  380. package/skills/provider-github-release/adapters/claude.md +1 -0
  381. package/skills/provider-github-release/adapters/codex.md +1 -0
  382. package/skills/provider-github-release/skill.json +55 -0
  383. package/skills/provider-kubernetes/SKILL.md +143 -0
  384. package/skills/provider-kubernetes/adapters/claude.md +1 -0
  385. package/skills/provider-kubernetes/adapters/codex.md +1 -0
  386. package/skills/provider-kubernetes/references/kubectl-patterns.md +58 -0
  387. package/skills/provider-kubernetes/skill.json +52 -0
  388. package/skills/provider-railway/SKILL.md +123 -0
  389. package/skills/provider-railway/adapters/claude.md +1 -0
  390. package/skills/provider-railway/adapters/codex.md +1 -0
  391. package/skills/provider-railway/adapters/local.md +1 -0
  392. package/skills/provider-railway/adapters/opencode.md +1 -0
  393. package/skills/provider-railway/references/verification-commands.md +39 -0
  394. package/skills/provider-railway/skill.json +71 -0
  395. package/skills/provider-ssh-manual/SKILL.md +97 -0
  396. package/skills/provider-ssh-manual/skill.json +54 -0
  397. package/skills/repo-coding-rules/SKILL.md +55 -0
  398. package/skills/repo-coding-rules/skill.json +34 -0
  399. package/skills/role-cont-eval/SKILL.md +91 -0
  400. package/skills/role-cont-eval/adapters/codex.md +1 -0
  401. package/skills/role-cont-eval/skill.json +36 -0
  402. package/skills/role-cont-qa/SKILL.md +100 -0
  403. package/skills/role-cont-qa/adapters/claude.md +1 -0
  404. package/skills/role-cont-qa/skill.json +36 -0
  405. package/skills/role-deploy/SKILL.md +97 -0
  406. package/skills/role-deploy/skill.json +36 -0
  407. package/skills/role-design/SKILL.md +50 -0
  408. package/skills/role-design/skill.json +36 -0
  409. package/skills/role-documentation/SKILL.md +76 -0
  410. package/skills/role-documentation/skill.json +36 -0
  411. package/skills/role-implementation/SKILL.md +45 -0
  412. package/skills/role-implementation/skill.json +36 -0
  413. package/skills/role-infra/SKILL.md +81 -0
  414. package/skills/role-infra/skill.json +36 -0
  415. package/skills/role-integration/SKILL.md +91 -0
  416. package/skills/role-integration/skill.json +36 -0
  417. package/skills/role-planner/SKILL.md +39 -0
  418. package/skills/role-planner/skill.json +21 -0
  419. package/skills/role-research/SKILL.md +65 -0
  420. package/skills/role-research/skill.json +36 -0
  421. package/skills/role-security/SKILL.md +60 -0
  422. package/skills/role-security/skill.json +36 -0
  423. package/skills/runtime-claude/SKILL.md +66 -0
  424. package/skills/runtime-claude/skill.json +36 -0
  425. package/skills/runtime-codex/SKILL.md +58 -0
  426. package/skills/runtime-codex/skill.json +36 -0
  427. package/skills/runtime-local/SKILL.md +46 -0
  428. package/skills/runtime-local/skill.json +36 -0
  429. package/skills/runtime-opencode/SKILL.md +58 -0
  430. package/skills/runtime-opencode/skill.json +36 -0
  431. package/skills/signal-hygiene/SKILL.md +51 -0
  432. package/skills/signal-hygiene/skill.json +20 -0
  433. package/skills/tui-design/SKILL.md +77 -0
  434. package/skills/tui-design/references/tui-design.md +259 -0
  435. package/skills/tui-design/skill.json +36 -0
  436. package/skills/wave-core/SKILL.md +141 -0
  437. package/skills/wave-core/references/marker-syntax.md +70 -0
  438. package/skills/wave-core/skill.json +35 -0
  439. package/src/README.md +85 -0
  440. package/src/api/README.md +22 -0
  441. package/src/api/public-types.ts +525 -0
  442. package/src/component-inventory.md +99 -0
  443. package/src/core/README.md +10 -0
  444. package/src/core/commands/README.md +3 -0
  445. package/src/core/commands/formatting-commands.ts +161 -0
  446. package/src/core/commands/image-commands.ts +144 -0
  447. package/src/core/commands/index.ts +1013 -0
  448. package/src/core/commands/list-commands.ts +370 -0
  449. package/src/core/commands/review-commands.ts +108 -0
  450. package/src/core/commands/text-commands.ts +119 -0
  451. package/src/core/schema/README.md +3 -0
  452. package/src/core/schema/text-schema.ts +512 -0
  453. package/src/core/selection/README.md +3 -0
  454. package/src/core/selection/mapping.ts +238 -0
  455. package/src/core/selection/review-anchors.ts +94 -0
  456. package/src/core/state/README.md +3 -0
  457. package/src/core/state/editor-state.ts +580 -0
  458. package/src/core/state/text-transaction.ts +276 -0
  459. package/src/formats/xlsx/io/parse-shared-strings.ts +41 -0
  460. package/src/formats/xlsx/io/parse-sheet.ts +289 -0
  461. package/src/formats/xlsx/io/parse-styles.ts +57 -0
  462. package/src/formats/xlsx/io/parse-workbook.ts +75 -0
  463. package/src/formats/xlsx/io/xlsx-session.ts +306 -0
  464. package/src/formats/xlsx/model/cell.ts +189 -0
  465. package/src/formats/xlsx/model/sheet.ts +244 -0
  466. package/src/formats/xlsx/model/styles.ts +118 -0
  467. package/src/formats/xlsx/model/workbook.ts +449 -0
  468. package/src/io/README.md +10 -0
  469. package/src/io/docx-session.ts +1763 -0
  470. package/src/io/export/README.md +3 -0
  471. package/src/io/export/export-session.ts +165 -0
  472. package/src/io/export/minimal-docx.ts +115 -0
  473. package/src/io/export/reattach-preserved-parts.ts +54 -0
  474. package/src/io/export/serialize-comments.ts +876 -0
  475. package/src/io/export/serialize-footnotes.ts +217 -0
  476. package/src/io/export/serialize-headers-footers.ts +200 -0
  477. package/src/io/export/serialize-main-document.ts +982 -0
  478. package/src/io/export/serialize-numbering.ts +97 -0
  479. package/src/io/export/serialize-revisions.ts +389 -0
  480. package/src/io/export/serialize-runtime-revisions.ts +265 -0
  481. package/src/io/export/serialize-tables.ts +147 -0
  482. package/src/io/export/split-review-boundaries.ts +194 -0
  483. package/src/io/normalize/README.md +3 -0
  484. package/src/io/normalize/normalize-text.ts +437 -0
  485. package/src/io/ooxml/README.md +3 -0
  486. package/src/io/ooxml/parse-comments.ts +779 -0
  487. package/src/io/ooxml/parse-complex-content.ts +287 -0
  488. package/src/io/ooxml/parse-fields.ts +438 -0
  489. package/src/io/ooxml/parse-footnotes.ts +403 -0
  490. package/src/io/ooxml/parse-headers-footers.ts +483 -0
  491. package/src/io/ooxml/parse-inline-media.ts +431 -0
  492. package/src/io/ooxml/parse-main-document.ts +1846 -0
  493. package/src/io/ooxml/parse-numbering.ts +425 -0
  494. package/src/io/ooxml/parse-revisions.ts +658 -0
  495. package/src/io/ooxml/parse-shapes.ts +271 -0
  496. package/src/io/ooxml/parse-tables.ts +568 -0
  497. package/src/io/ooxml/parse-theme.ts +314 -0
  498. package/src/io/ooxml/part-manifest.ts +136 -0
  499. package/src/io/ooxml/revision-boundaries.ts +351 -0
  500. package/src/io/opc/README.md +3 -0
  501. package/src/io/opc/corrupt-package.ts +166 -0
  502. package/src/io/opc/docx-package.ts +74 -0
  503. package/src/io/opc/package-reader.ts +320 -0
  504. package/src/io/opc/package-writer.ts +273 -0
  505. package/src/model/README.md +3 -0
  506. package/src/model/canonical-document.ts +1911 -0
  507. package/src/model/cds-1.0.0.ts +196 -0
  508. package/src/model/snapshot.ts +393 -0
  509. package/src/preservation/README.md +3 -0
  510. package/src/preservation/markup-compatibility.ts +48 -0
  511. package/src/preservation/opaque-fragment-store.ts +89 -0
  512. package/src/preservation/opaque-region.ts +233 -0
  513. package/src/preservation/package-preservation.ts +120 -0
  514. package/src/preservation/preserved-part-manifest.ts +56 -0
  515. package/src/preservation/relationship-retention.ts +57 -0
  516. package/src/preservation/store.ts +185 -0
  517. package/src/review/README.md +16 -0
  518. package/src/review/store/README.md +3 -0
  519. package/src/review/store/comment-anchors.ts +70 -0
  520. package/src/review/store/comment-remapping.ts +154 -0
  521. package/src/review/store/comment-store.ts +331 -0
  522. package/src/review/store/comment-thread.ts +109 -0
  523. package/src/review/store/revision-actions.ts +394 -0
  524. package/src/review/store/revision-store.ts +303 -0
  525. package/src/review/store/revision-types.ts +168 -0
  526. package/src/review/store/runtime-comment-store.ts +43 -0
  527. package/src/runtime/README.md +3 -0
  528. package/src/runtime/ai-action-policy.ts +764 -0
  529. package/src/runtime/document-runtime.ts +969 -0
  530. package/src/runtime/read-only-diagnostics-runtime.ts +232 -0
  531. package/src/runtime/review-runtime.ts +44 -0
  532. package/src/runtime/revision-runtime.ts +107 -0
  533. package/src/runtime/session-capabilities.ts +138 -0
  534. package/src/runtime/surface-projection.ts +570 -0
  535. package/src/runtime/table-commands.ts +84 -0
  536. package/src/runtime/table-schema.ts +125 -0
  537. package/src/ui/README.md +30 -0
  538. package/src/ui/WordReviewEditor.tsx +1283 -0
  539. package/src/ui/comments/README.md +3 -0
  540. package/src/ui/compatibility/README.md +3 -0
  541. package/src/ui/editor-surface/README.md +3 -0
  542. package/src/ui/headless/comment-decoration-model.ts +124 -0
  543. package/src/ui/headless/revision-decoration-model.ts +128 -0
  544. package/src/ui/headless/selection-helpers.ts +34 -0
  545. package/src/ui/headless/use-editor-keyboard.ts +98 -0
  546. package/src/ui/review/README.md +3 -0
  547. package/src/ui/shared/revision-filters.ts +31 -0
  548. package/src/ui/status/README.md +3 -0
  549. package/src/ui/theme/README.md +3 -0
  550. package/src/ui/toolbar/README.md +3 -0
  551. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +48 -0
  552. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +44 -0
  553. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  554. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  555. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +139 -0
  556. package/src/ui-tailwind/editor-surface/pm-decorations.ts +98 -0
  557. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  558. package/src/ui-tailwind/editor-surface/pm-schema.ts +452 -0
  559. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +327 -0
  560. package/src/ui-tailwind/editor-surface/search-plugin.ts +157 -0
  561. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  562. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  563. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +118 -0
  564. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +52 -0
  565. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  566. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +215 -0
  567. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  568. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +108 -0
  569. package/src/ui-tailwind/index.ts +61 -0
  570. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +276 -0
  571. package/src/ui-tailwind/review/tw-health-panel.tsx +120 -0
  572. package/src/ui-tailwind/review/tw-review-rail.tsx +120 -0
  573. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  574. package/src/ui-tailwind/status/tw-status-bar.tsx +58 -0
  575. package/src/ui-tailwind/theme/editor-theme.css +190 -0
  576. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +48 -0
  577. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +231 -0
  578. package/src/ui-tailwind/tw-review-workspace.tsx +140 -0
  579. package/src/validation/README.md +3 -0
  580. package/src/validation/compatibility-engine.ts +317 -0
  581. package/src/validation/compatibility-report.ts +160 -0
  582. package/src/validation/diagnostics.ts +203 -0
  583. package/src/validation/import-diagnostics.ts +128 -0
  584. package/src/validation/low-priority-word-surfaces.ts +373 -0
  585. package/test/README.md +16 -0
  586. package/test/core/formatting-commands.test.ts +285 -0
  587. package/test/core/image-commands.test.ts +298 -0
  588. package/test/core/mapping.test.ts +186 -0
  589. package/test/core/text-commands.test.ts +176 -0
  590. package/test/fixtures/docx/F01-basic-contract.docx +0 -0
  591. package/test/fixtures/docx/F01-basic-contract.md +33 -0
  592. package/test/fixtures/docx/F02-headings-styles.docx +0 -0
  593. package/test/fixtures/docx/F02-headings-styles.md +33 -0
  594. package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
  595. package/test/fixtures/docx/F03-legal-outline-numbering.md +34 -0
  596. package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
  597. package/test/fixtures/docx/F04-restart-numbering-schedules.md +33 -0
  598. package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
  599. package/test/fixtures/docx/F05-table-heavy-agreement.md +34 -0
  600. package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
  601. package/test/fixtures/docx/F06-merged-cells-signature-table.md +34 -0
  602. package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
  603. package/test/fixtures/docx/F07-inline-images-exhibit.md +34 -0
  604. package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
  605. package/test/fixtures/docx/F08-hyperlinks.md +33 -0
  606. package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
  607. package/test/fixtures/docx/F09-comments-single-paragraph.md +33 -0
  608. package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
  609. package/test/fixtures/docx/F10-threaded-comments-resolve.md +33 -0
  610. package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
  611. package/test/fixtures/docx/F11-redlines-basic.md +33 -0
  612. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
  613. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +33 -0
  614. package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
  615. package/test/fixtures/docx/F13-comments-on-deleted-text.md +33 -0
  616. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
  617. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +33 -0
  618. package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
  619. package/test/fixtures/docx/F15-sections-headers-footers.md +33 -0
  620. package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
  621. package/test/fixtures/docx/F16-footnotes-endnotes.md +33 -0
  622. package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
  623. package/test/fixtures/docx/F17-fields-and-toc.md +33 -0
  624. package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
  625. package/test/fixtures/docx/F18-content-controls-template.md +33 -0
  626. package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
  627. package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +35 -0
  628. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
  629. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +33 -0
  630. package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
  631. package/test/fixtures/docx/F21-malformed-broken-docx.md +33 -0
  632. package/test/fixtures/docx/README.md +74 -0
  633. package/test/fixtures/docx/certification-manifest.json +104 -0
  634. package/test/fixtures/docx/fixtures.manifest.json +196 -0
  635. package/test/fixtures/encrypted-docx/README.md +27 -0
  636. package/test/fixtures/encrypted-docx/certification-manifest.json +9 -0
  637. package/test/fixtures/encrypted-docx/fixtures.manifest.json +47 -0
  638. package/test/fixtures/scenarios/docx/README.md +25 -0
  639. package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
  640. package/test/fixtures/scenarios/docx/S01-sow-template.md +30 -0
  641. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
  642. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +32 -0
  643. package/test/fixtures/scenarios/docx/scenario-manifest.json +53 -0
  644. package/test/formats/xlsx/io/xlsx-import.test.ts +766 -0
  645. package/test/formats/xlsx/model/workbook.test.ts +669 -0
  646. package/test/helpers/dom-setup.ts +124 -0
  647. package/test/io/comment-roundtrip.test.ts +272 -0
  648. package/test/io/complex-content-roundtrip.test.ts +632 -0
  649. package/test/io/docx-compatibility-regression.test.ts +199 -0
  650. package/test/io/docx-session.test.ts +1495 -0
  651. package/test/io/footnotes-roundtrip.test.ts +318 -0
  652. package/test/io/headers-footers-roundtrip.test.ts +547 -0
  653. package/test/io/numbering-roundtrip.test.ts +234 -0
  654. package/test/io/package-reader.test.ts +199 -0
  655. package/test/io/paragraph-properties-roundtrip.test.ts +129 -0
  656. package/test/io/preserved-package-roundtrip.test.ts +365 -0
  657. package/test/io/property-completeness.test.ts +292 -0
  658. package/test/io/revision-roundtrip.test.ts +347 -0
  659. package/test/io/structural-blocks.test.ts +202 -0
  660. package/test/io/table-media-roundtrip.test.ts +448 -0
  661. package/test/io/table-properties-roundtrip.test.ts +569 -0
  662. package/test/io/table-roundtrip.test.ts +302 -0
  663. package/test/io/text-roundtrip.test.ts +344 -0
  664. package/test/model/canonical-document.test.ts +285 -0
  665. package/test/preservation/opaque-fragment-store.test.ts +121 -0
  666. package/test/preservation/package-preservation.test.ts +395 -0
  667. package/test/preservation/store.test.ts +84 -0
  668. package/test/review/comment-remapping.test.ts +220 -0
  669. package/test/review/comment-store.test.ts +180 -0
  670. package/test/review/move-revisions.test.ts +143 -0
  671. package/test/review/property-change-revisions.test.ts +225 -0
  672. package/test/review/revision-actions.test.ts +330 -0
  673. package/test/review/revision-store.test.ts +193 -0
  674. package/test/runtime/session-capabilities.test.ts +260 -0
  675. package/test/runtime/table-commands.test.ts +356 -0
  676. package/test/runtime/table-schema.test.ts +221 -0
  677. package/test/runtime/tracked-changes-toggle.test.ts +107 -0
  678. package/test/ui/comment-review-surface.test.tsx +114 -0
  679. package/test/ui/reduced-motion-toggle.test.tsx +137 -0
  680. package/test/ui/word-review-editor.imported-scenarios.test.tsx +169 -0
  681. package/test/ui/word-review-editor.interaction.test.tsx +1198 -0
  682. package/test/ui/word-review-editor.test.js +188 -0
  683. package/test/ui/word-review-editor.test.tsx +280 -0
  684. package/test/ui-tailwind/search-plugin.test.ts +286 -0
  685. package/test/validation/compatibility-engine.test.ts +336 -0
  686. package/test/validation/compatibility-report.test.ts +189 -0
  687. package/test/validation/low-priority-word-surfaces.test.ts +282 -0
  688. package/test/validation/malformed-doc.test.ts +113 -0
  689. package/test-results/.last-run.json +4 -0
  690. package/wave.config.json +406 -0
@@ -0,0 +1,456 @@
1
+ # Public API
2
+
3
+ This file defines the intended public API for the shipped docx React component.
4
+
5
+ Within the broader `react-ooxml-office` repo story, this remains a format-specific contract:
6
+
7
+ - it describes the current `docx` implementation only
8
+ - it does not define a neutral multi-format editor API
9
+ - future `xlsx` or other verticals should gain sibling API docs rather than silently widening `WordReviewEditor`
10
+
11
+ ## Public Component
12
+
13
+ ```tsx
14
+ <WordReviewEditor />
15
+ ```
16
+
17
+ The repo standardizes on `WordReviewEditor` as the public name across docs, source, and services.
18
+
19
+ Internal harness routes, Railway demo pages, certification dashboards, and other operator-facing surfaces are not part of the public component API. They may exercise the same runtime, but they are documentation, proof, or demo surfaces rather than shipped host contracts.
20
+
21
+ ## Public Contracts
22
+
23
+ The implementation should expose:
24
+
25
+ - `WordReviewEditor`
26
+ - `WordReviewEditorProps`
27
+ - `WordReviewEditorRef`
28
+ - `EditorUser`
29
+ - `EditorDatastoreAdapter`
30
+ - `PersistedEditorSnapshot`
31
+ - `CompatibilityReport`
32
+ - `EditorWarning`
33
+ - `EditorError`
34
+ - `WordReviewEditorEvent`
35
+
36
+ The runtime-facing internal session type is `DocumentRuntime`. `WordEditor` is not a shipped public name.
37
+
38
+ ## Usage Model
39
+
40
+ The component is uncontrolled by default.
41
+
42
+ Host responsibilities:
43
+
44
+ - provide `documentId`
45
+ - provide `currentUser`
46
+ - provide exactly one initial source on first load: `initialDocx` or `initialSnapshot`
47
+ - optionally provide a datastore adapter
48
+ - optionally listen to events, warnings, and errors
49
+
50
+ Runtime responsibilities:
51
+
52
+ - own the live editing session
53
+ - apply commands and transactions
54
+ - manage undo and redo
55
+ - manage comments and revisions
56
+ - expose review-ready runtime snapshot projections for the document surface, comment sidebar, revision sidebar, and compatibility surfaces
57
+ - provide export and compatibility reporting
58
+
59
+ Controlled behavior is intentionally narrow:
60
+
61
+ - hosts may replace the active document only through `externalDocumentRevision` plus `externalDocSource`
62
+ - when the revision token changes, the editor tears down the current session and reloads the new source
63
+ - hosts do not stream keystrokes or partial selections back into props
64
+
65
+ ## Ref Surface
66
+
67
+ The ref should support:
68
+
69
+ - `focus()`
70
+ - `blur()`
71
+ - `undo()`
72
+ - `redo()`
73
+ - `addComment(...)`
74
+ - `openComment(commentId)`
75
+ - `resolveComment(commentId)`
76
+ - `reopenComment(commentId)`
77
+ - `addCommentReply(commentId, body)`
78
+ - `editCommentBody(commentId, body)`
79
+ - `acceptChange(changeId)`
80
+ - `rejectChange(changeId)`
81
+ - `acceptAllChanges()`
82
+ - `rejectAllChanges()`
83
+ - `exportDocx(options?)`
84
+ - `getSnapshot()`
85
+ - `getCompatibilityReport()`
86
+ - `getWarnings()`
87
+
88
+ The ref is a thin wrapper over the runtime. It does not expose DOM nodes or mutable canonical state.
89
+
90
+ ## Props Surface
91
+
92
+ ```ts
93
+ type ExternalDocumentSource =
94
+ | {
95
+ kind: "docx";
96
+ bytes: Uint8Array | ArrayBuffer;
97
+ sourceLabel?: string;
98
+ }
99
+ | {
100
+ kind: "snapshot";
101
+ snapshot: PersistedEditorSnapshot;
102
+ sourceLabel?: string;
103
+ };
104
+
105
+ interface WordReviewEditorProps {
106
+ documentId: string;
107
+ currentUser: EditorUser;
108
+
109
+ initialDocx?: Uint8Array | ArrayBuffer;
110
+ initialSnapshot?: PersistedEditorSnapshot;
111
+ initialSourceLabel?: string;
112
+
113
+ externalDocumentRevision?: string;
114
+ externalDocSource?: ExternalDocumentSource;
115
+
116
+ readOnly?: boolean;
117
+ reviewMode?: "editing" | "review";
118
+
119
+ // reviewMode behavior:
120
+ // - "editing" (default in some contexts): Reduces review chrome. Review rail hidden by default. Editing controls primary.
121
+ // - "review" (default): Review rail visible. Comments and changes are prominent.
122
+ // - Both modes keep health/trust information reachable and fatal errors always visible.
123
+ // - reviewMode does NOT control editing capability — use readOnly for that.
124
+
125
+ markupDisplay?: "clean" | "simple" | "all";
126
+ // markupDisplay is accepted for backward compatibility but is now
127
+ // derived internally from the editor's view mode (canvas → clean,
128
+ // document → all). The editor manages viewMode as internal state;
129
+ // it is not a public prop on WordReviewEditorProps.
130
+
131
+ datastore?: EditorDatastoreAdapter;
132
+ autosave?: AutosaveConfig;
133
+
134
+ onEvent?: (event: WordReviewEditorEvent) => void;
135
+ onWarning?: (warning: EditorWarning) => void;
136
+ onError?: (error: EditorError) => void;
137
+ }
138
+ ```
139
+
140
+ Load rules:
141
+
142
+ - provide exactly one of `initialDocx` or `initialSnapshot` for an explicit initial load
143
+ - `externalDocumentRevision` plus `externalDocSource` is the only replace-on-change path
144
+ - if the external revision token does not change, props do not mutate the live session
145
+ - `initialDocx` now boots a real package-backed session, not a text-only fallback snapshot
146
+ - malformed or unreadable package bytes fail closed into diagnostics/read-only mode with export blocked
147
+
148
+ ## Planned AI Action Extension
149
+
150
+ This contract is reserved for the post-v1 roadmap and is not part of the
151
+ currently shipped public surface in `src/api/public-types.ts`.
152
+
153
+ The intended shape is:
154
+
155
+ - the host supplies the model access or action executor
156
+ - the runtime packages canonical context such as selection, section bounds, anchors, comment threads, revisions, compatibility warnings, and edit capabilities
157
+ - AI actions target bounded legal-review workflows rather than arbitrary document mutation
158
+ - content-changing results come back as proposals or runtime command requests that must pass normal validation, compatibility, and export gates
159
+ - the UI must present explicit review/confirmation affordances before applying content-changing proposals
160
+
161
+ Illustrative direction:
162
+
163
+ ```ts
164
+ type PlannedWordReviewEditorAiAction =
165
+ | "edit_selection"
166
+ | "rewrite_section"
167
+ | "summarize_comments"
168
+ | "suggest_comment_response"
169
+ | "resolve_comment_thread"
170
+ | "apply_drafting_instruction"
171
+ | "validate_and_export";
172
+
173
+ interface PlannedWordReviewEditorAiRequest {
174
+ action: PlannedWordReviewEditorAiAction;
175
+ instruction?: string;
176
+ selection?: SelectionSnapshot;
177
+ anchor?: EditorAnchorProjection;
178
+ commentIds?: string[];
179
+ revisionIds?: string[];
180
+ compatibility: CompatibilityReport;
181
+ capabilities: {
182
+ readOnly: boolean;
183
+ canEdit: boolean;
184
+ canExport: boolean;
185
+ };
186
+ }
187
+
188
+ interface PlannedWordReviewEditorAiAdapter {
189
+ runAction(
190
+ request: PlannedWordReviewEditorAiRequest,
191
+ ): Promise<
192
+ | {
193
+ kind: "proposal";
194
+ summary: string;
195
+ requiresConfirmation: true;
196
+ }
197
+ | {
198
+ kind: "workflow";
199
+ workflow: "validate_and_export";
200
+ }
201
+ | {
202
+ kind: "rejected";
203
+ reason: string;
204
+ }
205
+ >;
206
+ }
207
+ ```
208
+
209
+ Guardrails for the planned surface:
210
+
211
+ - no built-in model client ships inside `WordReviewEditor`
212
+ - no direct DOM writes or direct canonical-state mutation from model output
213
+ - no bypass around permissions, protected ranges, compatibility warnings, or export blockers
214
+ - no implication that unsupported OOXML becomes editable just because an AI action exists
215
+
216
+ ## Encrypted Source Handling
217
+
218
+ The active component contract does not include editor-owned handling for password-to-open Office containers, and encrypted intake is not part of the active wave roadmap.
219
+
220
+ Hosts must provide one of:
221
+
222
+ - normal OPC `.docx` bytes through `initialDocx`
223
+ - normal OPC `.docx` bytes through `externalDocSource.kind = "docx"`
224
+ - a canonical snapshot
225
+
226
+ If an upstream system accepts encrypted Office containers, it must decrypt or otherwise preprocess them before handing bytes to `WordReviewEditor`. Reintroducing editor-owned encrypted intake would require an explicit public-API revision rather than a silent expansion of the current load surface.
227
+
228
+ ## Runtime Snapshot Direction
229
+
230
+ The host-facing persisted snapshot is still `PersistedEditorSnapshot`.
231
+
232
+ The live UI should render from `RuntimeRenderSnapshot`, not by reconstructing review state from persisted data during render. In particular:
233
+
234
+ - the comment sidebar reads runtime-owned thread projections, detached/open/resolved counts, and the active thread id from `RuntimeRenderSnapshot.comments`
235
+ - the tracked-change sidebar reads runtime-owned revision projections, actionability flags, and batch counts from `RuntimeRenderSnapshot.trackedChanges`
236
+ - compatibility surfaces read explicit blocking reasons from `RuntimeRenderSnapshot.compatibility`
237
+
238
+ Selectors may reshape those projections for presentation, but they must not invent a second source of live review truth.
239
+
240
+ Current boundary note:
241
+
242
+ - `SelectionSnapshot`, `EditorAnchorProjection`, and `EditorSurfaceSnapshot` still describe the current flat paragraph/opaque-block runtime.
243
+ - Imported body-level tables remain preserve-only in the live editor path.
244
+ - Future post-v1 waves must revise these contracts explicitly as new slices become `read-only projected`, `bounded editable`, or fully owned rather than silently widening the current public types.
245
+
246
+ ## Event Surface
247
+
248
+ The canonical host event stream is a discriminated union:
249
+
250
+ ```ts
251
+ type WordReviewEditorEvent =
252
+ | {
253
+ type: "ready";
254
+ documentId: string;
255
+ sessionId: string;
256
+ source: "docx" | "snapshot" | "datastore" | "canonical";
257
+ stats: DocumentStats;
258
+ compatibility: CompatibilityReport;
259
+ }
260
+ | {
261
+ type: "dirty_changed";
262
+ documentId: string;
263
+ isDirty: boolean;
264
+ }
265
+ | {
266
+ type: "selection_changed";
267
+ documentId: string;
268
+ selection: SelectionSnapshot;
269
+ }
270
+ | {
271
+ type: "comment_added";
272
+ documentId: string;
273
+ commentId: string;
274
+ anchor: EditorAnchorProjection;
275
+ }
276
+ | {
277
+ type: "comment_resolved";
278
+ documentId: string;
279
+ commentId: string;
280
+ }
281
+ | {
282
+ type: "change_accepted";
283
+ documentId: string;
284
+ changeId: string;
285
+ }
286
+ | {
287
+ type: "change_rejected";
288
+ documentId: string;
289
+ changeId: string;
290
+ }
291
+ | {
292
+ type: "warning_added";
293
+ documentId: string;
294
+ warning: EditorWarning;
295
+ }
296
+ | {
297
+ type: "warning_cleared";
298
+ documentId: string;
299
+ warningId: string;
300
+ code: EditorWarning["code"];
301
+ }
302
+ | {
303
+ type: "error";
304
+ documentId: string;
305
+ error: EditorError;
306
+ }
307
+ | {
308
+ type: "autosave_state";
309
+ documentId: string;
310
+ state: AutosaveState;
311
+ }
312
+ | {
313
+ type: "snapshot_saved";
314
+ documentId: string;
315
+ snapshot: PersistedEditorSnapshot;
316
+ isAutosave: boolean;
317
+ }
318
+ | {
319
+ type: "export_completed";
320
+ documentId: string;
321
+ result: ExportResult;
322
+ };
323
+ ```
324
+
325
+ Event delivery rules:
326
+
327
+ - each mounted runtime load emits exactly one `ready` event
328
+ - hosts should treat `ready` as the authoritative session-start marker rather than inferring load completion from render timing
329
+
330
+ Planned AI-event direction:
331
+
332
+ - a future AI extension may add runtime-owned events such as `ai_action_started`, `ai_action_proposed`, `ai_action_applied`, and `ai_action_failed`
333
+ - those events are not part of the current shipped `WordReviewEditorEvent` union and should not be exposed until the AI contract lands as a deliberate API revision
334
+
335
+ ## Warnings And Errors
336
+
337
+ ```ts
338
+ type EditorAnchorProjection =
339
+ | {
340
+ kind: "range";
341
+ from: number;
342
+ to: number;
343
+ assoc: {
344
+ start: -1 | 1;
345
+ end: -1 | 1;
346
+ };
347
+ }
348
+ | {
349
+ kind: "node";
350
+ at: number;
351
+ assoc: -1 | 1;
352
+ }
353
+ | {
354
+ kind: "detached";
355
+ lastKnownRange: {
356
+ from: number;
357
+ to: number;
358
+ };
359
+ reason: "deleted" | "invalidatedByStructureChange" | "importAmbiguity";
360
+ };
361
+
362
+ interface EditorWarning {
363
+ warningId: string;
364
+ code:
365
+ | "unsupported_ooxml_preserved"
366
+ | "unsupported_ooxml_locked"
367
+ | "import_normalized"
368
+ | "export_roundtrip_risk"
369
+ | "comment_anchor_detached"
370
+ | "revision_anchor_detached"
371
+ | "large_document_degraded"
372
+ | "font_substitution"
373
+ | "image_missing";
374
+ severity: "info" | "warning";
375
+ message: string;
376
+ source:
377
+ | "import"
378
+ | "runtime"
379
+ | "review"
380
+ | "preservation"
381
+ | "validation"
382
+ | "export";
383
+ affectedAnchor?: EditorAnchorProjection;
384
+ featureEntryId?: string;
385
+ details?: Record<string, unknown>;
386
+ }
387
+
388
+ interface EditorError {
389
+ errorId: string;
390
+ code:
391
+ | "import_failed"
392
+ | "export_failed"
393
+ | "package_corrupt"
394
+ | "validation_failed"
395
+ | "datastore_failed"
396
+ | "internal_invariant";
397
+ message: string;
398
+ isFatal: boolean;
399
+ source:
400
+ | "import"
401
+ | "runtime"
402
+ | "validation"
403
+ | "datastore"
404
+ | "export";
405
+ details?: Record<string, unknown>;
406
+ }
407
+ ```
408
+
409
+ Range references are runtime-derived projections over canonical positions. DOM paths are not part of the public contract.
410
+
411
+ ## Persistence Model
412
+
413
+ The datastore adapter should support:
414
+
415
+ - loading the latest snapshot or source document
416
+ - saving fast JSON checkpoints
417
+ - saving exported `.docx` artifacts
418
+ - optional telemetry emission
419
+
420
+ The persisted resume artifact is:
421
+
422
+ ```ts
423
+ interface PersistedEditorSnapshot {
424
+ snapshotVersion: "persisted-editor-snapshot/1";
425
+ schemaVersion: "cds/1.0.0";
426
+ documentId: string;
427
+ docId: string;
428
+ createdAt: string;
429
+ updatedAt: string;
430
+ savedAt: string;
431
+ editorBuild: string;
432
+ canonicalDocument: CanonicalDocument;
433
+ compatibility: CompatibilityReport;
434
+ warningLog: EditorWarning[];
435
+ }
436
+
437
+ interface CompatibilityReport {
438
+ reportVersion: "compatibility-report/1";
439
+ generatedAt: string;
440
+ blockExport: boolean;
441
+ featureEntries: CompatibilityFeatureEntry[];
442
+ warnings: EditorWarning[];
443
+ errors: EditorError[];
444
+ }
445
+ ```
446
+
447
+ Persistence rules:
448
+
449
+ - `getSnapshot()` returns `PersistedEditorSnapshot`
450
+ - loading a snapshot resumes canonical state without rerunning `.docx` import
451
+ - render snapshots are internal runtime projections and are not a persistence contract
452
+ - manual export first saves a non-autosave snapshot checkpoint through `datastore.saveSnapshot(...)`
453
+ - if that manual checkpoint fails, export is rejected and `saveExport(...)` is not attempted
454
+ - autosave timers are scoped to the current revision token, so a successful manual export checkpoint clears any pending autosave for the same revision
455
+
456
+ The host does not stream keystrokes through props. Replace-on-change is the only supported controlled pattern.
@@ -0,0 +1,58 @@
1
+ # Repository Guidance
2
+
3
+ Use this page as the default in-repo guidance for product and architecture work.
4
+
5
+ ## Defaults
6
+
7
+ - Keep host-format fidelity as the top-level product invariant.
8
+ - Treat runtime-owned structured state as the canonical source of truth.
9
+ - Route all edits through commands and transactions; do not patch DOM state directly and call it authoritative.
10
+ - Preserve unsupported but preservable OOXML whenever possible; never silently drop unknown content.
11
+ - Keep file ownership explicit in plans, waves, and ad-hoc prompts.
12
+ - Prefer small, reviewable changes over broad speculative rewrites.
13
+ - Update impacted docs when interfaces, scope, component maturity, or proof expectations change.
14
+ - Keep maturity docs aligned with real subsystem status rather than narrative progress.
15
+ - Run the relevant validation commands or fixture checks for touched surfaces.
16
+ - Treat external docs as non-canonical unless the task is explicitly about third-party APIs or OOXML behavior.
17
+
18
+ ## Layered Repo Rules
19
+
20
+ - The only shipped implementation today is the docx runtime behind `WordReviewEditor`.
21
+ - Shared platform docs may broaden before the source tree does; do not misrepresent planned structure as landed code.
22
+ - `xlsx` planning work should align to the shared OOXML platform doctrine without copying docx-specific UI or ProseMirror assumptions into spreadsheet architecture.
23
+ - `pdf` may appear in repo-level planning, but it is not part of the first shared OOXML platform contract.
24
+
25
+ ## Current Docx Rules
26
+
27
+ - The current shipped editor is not a Word clone. Keep UI clean, contextual, and minimal.
28
+ - The repo is still optimized around legal-review workflows in the landed docx runtime. Comments, redlines, lists, tables, and safe round-trip behavior matter more than cosmetic formatting breadth.
29
+ - Follow `DESIGN.md` for current docx layout, token, and interaction decisions.
30
+ - Default visual posture is calm, precise, and review-oriented.
31
+ - Prefer canvas mode as the baseline review experience; page mode is optional and secondary.
32
+ - Keep the document surface central. Toolbars, sidebars, and status surfaces should support it, not compete with it.
33
+ - Separate canonical content, review state, preservation layer, UI state, and OOXML import or export boundaries.
34
+ - The shipped editor runs in the main thread with no Web Workers.
35
+ - The Microsoft Open XML SDK must not be pulled into the shipped React bundle. Use it only in CI or internal validation services.
36
+
37
+ ## Validation Bias
38
+
39
+ When making architecture decisions, prefer proofs that increase confidence in:
40
+
41
+ - current docx import safety
42
+ - current docx export safety
43
+ - Word reopen compatibility for shipped flows
44
+ - future Excel reopen compatibility for planned xlsx flows
45
+ - anchor and range remapping stability
46
+ - preservation of unsupported content
47
+ - adherence to the token-driven design system when UI surfaces are touched
48
+
49
+ ## Update These Docs When Behavior Changes
50
+
51
+ - `docs/plans/master-plan.md`
52
+ - `docs/plans/current-state.md`
53
+ - `docs/roadmap.md`
54
+ - `docs/plans/component-cutover-matrix.md`
55
+ - `docs/plans/waves/README.md`
56
+ - `docs/reference/public-api.md` when the shipped docx public behavior changes
57
+ - `docs/reference/ooxml-compliance.md` for shipped docx compatibility changes
58
+ - `docs/reference/xlsx/xlsx-ooxml-compliance.md` for planned xlsx contract changes
@@ -0,0 +1,182 @@
1
+ # Runtime Configuration Reference
2
+
3
+ This directory is the canonical reference for executor configuration in the packaged Wave release.
4
+
5
+ Use it when you need the full supported surface for:
6
+
7
+ - `wave.config.json`
8
+ - `lanes.<lane>.executors`
9
+ - `waveControl`
10
+ - `executors.profiles.<profile>`
11
+ - per-agent `### Executor` blocks inside a wave file
12
+
13
+ ## Naming Conventions
14
+
15
+ - `wave.config.json` uses camelCase keys such as `profileName`, `addDirs`, `settingsJson`, and `allowedHttpHookUrls`.
16
+ - Wave markdown `### Executor` blocks use snake_case after the runtime prefix, such as `codex.profile_name`, `codex.add_dirs`, `claude.settings_json`, and `claude.allowed_http_hook_urls`.
17
+
18
+ ## Resolution Order
19
+
20
+ Executor id selection resolves in this order:
21
+
22
+ 1. agent `### Executor` `id`
23
+ 2. agent `### Executor` `profile` -> `executors.profiles.<profile>.id`
24
+ 3. `lanes.<lane>.runtimePolicy.defaultExecutorByRole`
25
+ 4. launcher `--executor`
26
+ 5. `executors.default`
27
+
28
+ Runtime settings resolve in layers:
29
+
30
+ 1. `executors.<runtime>` global defaults
31
+ 2. `lanes.<lane>.executors.<runtime>` lane overrides
32
+ 3. `executors.profiles.<profile>` or `lanes.<lane>.executors.profiles.<profile>`
33
+ 4. agent `### Executor`
34
+
35
+ Merge behavior:
36
+
37
+ - scalar values override from later layers
38
+ - list values merge for profile plus agent resolution on top of the lane base
39
+ - lane executor overrides replace the corresponding global runtime fields before profile and agent resolution
40
+ - a lane profile with the same name as a global profile replaces that profile definition for the lane
41
+
42
+ Skill settings resolve after executor selection, because runtime and deploy-kind skill attachment depend on the resolved executor id and the wave's default deploy environment kind. The starter layering order is:
43
+
44
+ 1. `skills.base`
45
+ 2. `lanes.<lane>.skills.base`
46
+ 3. `skills.byRole[resolvedRole]`
47
+ 4. `lanes.<lane>.skills.byRole[resolvedRole]`
48
+ 5. `skills.byRuntime[resolvedExecutorId]`
49
+ 6. `lanes.<lane>.skills.byRuntime[resolvedExecutorId]`
50
+ 7. `skills.byDeployKind[defaultDeployEnvironmentKind]`
51
+ 8. `lanes.<lane>.skills.byDeployKind[defaultDeployEnvironmentKind]`
52
+ 9. agent `### Skills`
53
+
54
+ Then Wave filters configured skills through each bundle's activation metadata. Explicit per-agent `### Skills` still force attachment even when activation metadata would not auto-match.
55
+
56
+ When retry-time fallback changes the runtime, Wave recomputes the effective skill set and rewrites the executor overlay before relaunch.
57
+
58
+ ## Common Fields
59
+
60
+ These fields are shared across runtimes:
61
+
62
+ | Surface | `wave.config.json` / profile key | Wave `### Executor` key | Notes |
63
+ | --- | --- | --- | --- |
64
+ | Executor id | `id` in profile only | `id` | Runtime id: `codex`, `claude`, `opencode`, `local` |
65
+ | Profile selection | n/a | `profile` | Selects `executors.profiles.<name>` |
66
+ | Model | `model` in profile, `executors.claude.model`, `executors.opencode.model` | `model` | Codex uses shared `model` from profile or agent only |
67
+ | Fallbacks | `fallbacks` in profile | `fallbacks` | Runtime ids used for retry-time reassignment |
68
+ | Tags | `tags` in profile | `tags` | Stored in resolved executor state for policy and traces |
69
+ | Budget turns | `budget.turns` in profile | `budget.turns` | Advisory generic turn budget. Wave records it in resolved metadata, but only runtime-specific settings such as `claude.maxTurns` or `opencode.steps` emit hard turn-limit flags. It does not set a Codex turn limit. |
70
+ | Budget minutes | `budget.minutes` in profile | `budget.minutes` | Primary wall-clock attempt budget |
71
+
72
+ Practical guidance:
73
+
74
+ - prefer `budget.minutes` for normal synthesis, integration, and closure work
75
+ - use generic `budget.turns` as a planning hint, not a hard failure trigger
76
+ - only set `claude.maxTurns` or `opencode.steps` when you deliberately want a hard ceiling for that runtime
77
+ - see [../../guides/recommendations-0.8.9.md](../../guides/recommendations-0.8.9.md) for the recommended `0.8.9` operating stance that combines advisory turn budgets with softer non-proof coordination states
78
+
79
+ ## Runtime Pages
80
+
81
+ - [codex.md](./codex.md)
82
+ - [claude.md](./claude.md)
83
+ - [opencode.md](./opencode.md)
84
+
85
+ ## Wave Control
86
+
87
+ `wave.config.json` may also declare a `waveControl` block for local-first telemetry delivery.
88
+
89
+ Supported top-level fields:
90
+
91
+ | Key | Type | Default | Purpose |
92
+ | --- | --- | --- | --- |
93
+ | `enabled` | boolean | `true` | Master switch for local queueing and remote delivery |
94
+ | `endpoint` | string | unset | Base URL for the Railway-hosted `services/wave-control` API |
95
+ | `workspaceId` | string | derived from repo path | Stable workspace identity used across runs |
96
+ | `projectId` | string | derived from `projectName` | Stable project/repo identity used for cross-workspace reporting and filtering |
97
+ | `authTokenEnvVar` | string | `WAVE_CONTROL_AUTH_TOKEN` | Environment variable name holding the bearer token |
98
+ | `reportMode` | string | `metadata-plus-selected` | `disabled`, `metadata-only`, `metadata-plus-selected`, or `full-artifact-upload` |
99
+ | `uploadArtifactKinds` | string[] | selected proof/trace/benchmark kinds | Artifact classes eligible for body upload when an artifact's upload policy requests a body |
100
+ | `requestTimeoutMs` | integer | `5000` | Per-batch network timeout |
101
+ | `flushBatchSize` | integer | `25` | Max queued telemetry events flushed per batch |
102
+ | `maxPendingEvents` | integer | `1000` | Cap for pending remote-delivery queue files; oldest pending uploads are dropped from the remote queue while the local `events.jsonl` stream remains authoritative |
103
+ | `captureCoordinationRecords` | boolean | `true` | Emit `coordination_record` telemetry |
104
+ | `captureControlPlaneEvents` | boolean | `true` | Emit `wave_run`, `attempt`, `proof_bundle`, and related control-plane events |
105
+ | `captureTraceBundles` | boolean | `true` | Emit finalized trace-bundle artifacts and gate snapshots |
106
+ | `captureBenchmarkRuns` | boolean | `true` | Emit `benchmark_run`, `benchmark_item`, `verification`, and `review` events |
107
+
108
+ Lane overrides may refine the same keys under `lanes.<lane>.waveControl`.
109
+
110
+ One-run override:
111
+
112
+ - `wave launch --no-telemetry` disables Wave Control queueing and remote delivery for that launcher invocation without changing the repo config.
113
+
114
+ Example:
115
+
116
+ ```json
117
+ {
118
+ "waveControl": {
119
+ "endpoint": "https://wave-control.up.railway.app/api/v1",
120
+ "workspaceId": "wave-main",
121
+ "projectId": "wave-orchestration",
122
+ "reportMode": "metadata-plus-selected",
123
+ "uploadArtifactKinds": [
124
+ "trace-run-metadata",
125
+ "trace-quality",
126
+ "benchmark-results"
127
+ ]
128
+ }
129
+ }
130
+ ```
131
+
132
+ Runtime-emitted Wave Control events also attach:
133
+
134
+ - `orchestratorId` from the active launcher or resident orchestrator
135
+ - `runtimeVersion` from the installed Wave package metadata
136
+
137
+ Those fields are queryable in the `wave-control` service alongside `workspaceId`,
138
+ `projectId`, `runKind`, `runId`, `lane`, and benchmark ids.
139
+
140
+ See [../wave-control.md](../wave-control.md) for the event contract and upload-policy model.
141
+
142
+ ## Generated Artifacts
143
+
144
+ Wave writes runtime artifacts here:
145
+
146
+ - live runs: `.tmp/<lane>-wave-launcher/executors/wave-<n>/<agent-slug>/`
147
+ - dry-run previews: `.tmp/<lane>-wave-launcher/dry-run/executors/wave-<n>/<agent-slug>/`
148
+
149
+ Common files:
150
+
151
+ - `launch-preview.json`: resolved invocation lines, env vars, retry mode, and structured attempt/turn-limit metadata for both dry-run and live launches
152
+ - `skills.resolved.md`: compact metadata-first skill catalog for the selected agent and runtime
153
+ - `skills.expanded.md`: full canonical/debug skill payload with `SKILL.md` bodies and adapters
154
+ - `skills.metadata.json`: resolved skill ids, activation metadata, permissions, hashes, and generated artifact paths
155
+ - `<runtime>-skills.txt`: runtime-projected compact skill text used by the selected executor
156
+ - `claude-system-prompt.txt`: generated Claude harness prompt overlay
157
+ - `claude-settings.json`: generated Claude settings overlay when inline settings data is present
158
+ - `opencode-agent-prompt.txt`: generated OpenCode harness prompt overlay
159
+ - `opencode.json`: generated OpenCode runtime config overlay
160
+ - `.tmp/<lane>-wave-launcher/control-plane/telemetry/events.jsonl`: local-first Wave Control event stream
161
+ - `.tmp/<lane>-wave-launcher/control-plane/telemetry/pending/`: queued event batches awaiting remote delivery
162
+ - `.tmp/<lane>-wave-launcher/control-plane/telemetry/delivery-state.json`: remote-delivery counters and last-error state
163
+
164
+ Runtime-specific delivery:
165
+
166
+ - Codex uses the compact catalog in the compiled prompt and attaches bundle directories through `--add-dir`.
167
+ - Claude appends the compact catalog to the generated system-prompt overlay.
168
+ - OpenCode injects the compact catalog into `opencode.json` and attaches `skill.json`, `SKILL.md`, the selected adapter, and recursive `references/**` files through `--file`.
169
+ - Local keeps skills prompt-only.
170
+
171
+ `launch-preview.json` also records the resolved skill metadata plus a `limits` section. For Claude and OpenCode, that section reports the runtime-specific turn ceiling when one was actually configured; when only generic `budget.turns` exists, the preview keeps it as advisory metadata and notes that Wave emitted no hard turn-limit flag. For Codex, it explicitly records that Wave emitted no turn-limit flag and that any effective ceiling may come from the selected Codex profile or upstream runtime. If a live Codex run later terminates with a visible `Reached max turns (N)` log line, Wave appends that observed ceiling back into the live `launch-preview.json` as runtime evidence rather than pretending Wave set it.
172
+
173
+ ## Recommended Validation Path
174
+
175
+ Use dry-run before relying on a new runtime configuration:
176
+
177
+ ```bash
178
+ pnpm exec wave doctor
179
+ pnpm exec wave launch --lane main --dry-run --no-dashboard
180
+ ```
181
+
182
+ Then inspect the generated preview and overlay files under `.tmp/<lane>-wave-launcher/dry-run/executors/`.