@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.
- package/README.md +44 -104
- package/package.json +66 -15
- package/src/api/public-types.ts +1 -1
- package/src/compare/diff-engine.ts +530 -0
- package/src/compare/export-redlines.ts +162 -0
- package/src/compare/snapshot.ts +37 -0
- package/src/core/commands/index.ts +1 -1
- package/src/core/state/editor-state.ts +2 -2
- package/src/index.ts +45 -0
- package/src/legal/bookmarks.ts +196 -0
- package/src/legal/cross-references.ts +356 -0
- package/src/legal/defined-terms.ts +203 -0
- package/src/runtime/document-runtime.ts +3 -5
- package/src/runtime/table-commands.ts +4 -1
- package/src/runtime/table-schema.ts +17 -2
- package/src/runtime/virtualized-rendering.ts +258 -0
- package/src/ui/WordReviewEditor.tsx +256 -35
- package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
- package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
- package/.codex/config.toml +0 -5
- package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
- package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
- package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
- package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
- package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
- package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
- package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
- package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
- package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
- package/.cursor/mcp.json +0 -7
- package/.github/workflows/ci.yml +0 -35
- package/.mcp.json +0 -7
- package/.openclaw/workspace-state.json +0 -4
- package/.pnpmrc.json +0 -1
- package/.wave-launch.sh +0 -7
- package/.workspace-marker +0 -1
- package/AGENTS.md +0 -78
- package/CHANGELOG.md +0 -177
- package/DESIGN.md +0 -929
- package/HEARTBEAT.md +0 -7
- package/IDENTITY.md +0 -23
- package/SOUL.md +0 -36
- package/TOOLS.md +0 -40
- package/USER.md +0 -17
- package/docs/README.md +0 -107
- package/docs/agents/wave-cont-eval-role.md +0 -36
- package/docs/agents/wave-cont-qa-role.md +0 -52
- package/docs/agents/wave-deploy-verifier-role.md +0 -34
- package/docs/agents/wave-design-role.md +0 -47
- package/docs/agents/wave-documentation-role.md +0 -34
- package/docs/agents/wave-infra-role.md +0 -34
- package/docs/agents/wave-integration-role.md +0 -37
- package/docs/agents/wave-launcher-role.md +0 -41
- package/docs/agents/wave-orchestrator-role.md +0 -52
- package/docs/agents/wave-planner-role.md +0 -39
- package/docs/agents/wave-security-role.md +0 -40
- package/docs/architecture/docx/README.md +0 -10
- package/docs/architecture/future/README.md +0 -8
- package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
- package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
- package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
- package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
- package/docs/comment-redline-overview.md +0 -350
- package/docs/concepts/context7-vs-skills.md +0 -118
- package/docs/concepts/operating-modes.md +0 -91
- package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
- package/docs/concepts/what-is-a-wave.md +0 -217
- package/docs/context7/bundles.json +0 -222
- package/docs/context7/planner-agent/README.md +0 -28
- package/docs/context7/planner-agent/manifest.json +0 -83
- package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
- package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
- package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
- package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
- package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
- package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
- package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
- package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
- package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
- package/docs/evals/arm-templates/README.md +0 -13
- package/docs/evals/arm-templates/full-wave.json +0 -15
- package/docs/evals/arm-templates/single-agent.json +0 -15
- package/docs/evals/benchmark-catalog.json +0 -670
- package/docs/evals/cases/README.md +0 -47
- package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
- package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
- package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
- package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
- package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
- package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
- package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
- package/docs/evals/external-benchmarks.json +0 -85
- package/docs/evals/external-command-config.sample.json +0 -9
- package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
- package/docs/evals/pilots/README.md +0 -47
- package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
- package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
- package/docs/evals/wave-benchmark-program.md +0 -302
- package/docs/guides/planner.md +0 -220
- package/docs/guides/recommendations-0.8.9.md +0 -133
- package/docs/guides/signal-wrappers.md +0 -165
- package/docs/guides/terminal-surfaces.md +0 -96
- package/docs/image copy.png +0 -0
- package/docs/image.png +0 -0
- package/docs/images/image.png +0 -0
- package/docs/legal-feedback-architecture.md +0 -498
- package/docs/plans/component-cutover-matrix.json +0 -1072
- package/docs/plans/component-cutover-matrix.md +0 -307
- package/docs/plans/context7-wave-orchestrator.md +0 -155
- package/docs/plans/current-state.md +0 -198
- package/docs/plans/docx/README.md +0 -9
- package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
- package/docs/plans/examples/wave-example-live-proof.md +0 -435
- package/docs/plans/master-plan.md +0 -224
- package/docs/plans/migration.md +0 -538
- package/docs/plans/operations/README.md +0 -7
- package/docs/plans/operations/wave-10-word-certification.md +0 -87
- package/docs/plans/operations/wave-8-railway-staging.md +0 -153
- package/docs/plans/operations/wave-9-manual-certification.md +0 -73
- package/docs/plans/platform/README.md +0 -9
- package/docs/plans/reference/legal-checklist-coverage.md +0 -258
- package/docs/plans/wave-orchestrator.md +0 -423
- package/docs/plans/waves/README.md +0 -75
- package/docs/plans/waves/completed/wave-0.md +0 -195
- package/docs/plans/waves/completed/wave-1.md +0 -379
- package/docs/plans/waves/completed/wave-10.md +0 -670
- package/docs/plans/waves/completed/wave-11.md +0 -335
- package/docs/plans/waves/completed/wave-12.md +0 -417
- package/docs/plans/waves/completed/wave-13.md +0 -316
- package/docs/plans/waves/completed/wave-14.md +0 -319
- package/docs/plans/waves/completed/wave-15.md +0 -321
- package/docs/plans/waves/completed/wave-16.md +0 -316
- package/docs/plans/waves/completed/wave-17.md +0 -331
- package/docs/plans/waves/completed/wave-18.md +0 -328
- package/docs/plans/waves/completed/wave-2.md +0 -438
- package/docs/plans/waves/completed/wave-3.md +0 -435
- package/docs/plans/waves/completed/wave-4.md +0 -430
- package/docs/plans/waves/completed/wave-5.md +0 -430
- package/docs/plans/waves/completed/wave-6.md +0 -430
- package/docs/plans/waves/completed/wave-7.md +0 -526
- package/docs/plans/waves/completed/wave-8.md +0 -596
- package/docs/plans/waves/completed/wave-9.md +0 -552
- package/docs/plans/waves/deferred/README.md +0 -14
- package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
- package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
- package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
- package/docs/plans/waves/design/README.md +0 -5
- package/docs/plans/waves/design/wave-1-a1.md +0 -309
- package/docs/plans/waves/reviews/README.md +0 -5
- package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
- package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
- package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
- package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
- package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
- package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
- package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
- package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
- package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
- package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
- package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
- package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
- package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
- package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
- package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
- package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
- package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
- package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
- package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
- package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
- package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
- package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
- package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
- package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
- package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
- package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
- package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
- package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
- package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
- package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
- package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
- package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
- package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
- package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
- package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
- package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
- package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
- package/docs/plans/waves/reviews/wave-8-security.md +0 -47
- package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
- package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
- package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
- package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
- package/docs/plans/waves/specs/README.md +0 -5
- package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
- package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
- package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
- package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
- package/docs/plans/waves/wave-19.md +0 -341
- package/docs/plans/waves/wave-20.md +0 -308
- package/docs/plans/waves/wave-21.md +0 -289
- package/docs/plans/waves/wave-22.md +0 -221
- package/docs/plans/waves/wave-23.md +0 -295
- package/docs/plans/waves/wave-24.md +0 -286
- package/docs/plans/waves/wave-25.md +0 -313
- package/docs/plans/waves/wave-26.md +0 -300
- package/docs/plans/waves/wave-27.md +0 -299
- package/docs/plans/waves/wave-28.md +0 -368
- package/docs/plans/waves/wave-29.md +0 -303
- package/docs/plans/waves/wave-30.md +0 -307
- package/docs/plans/waves/wave-31.md +0 -231
- package/docs/plans/waves/wave-32.md +0 -152
- package/docs/plans/waves/wave-33.md +0 -147
- package/docs/plans/waves/wave-34.md +0 -148
- package/docs/plans/waves/wave-35.md +0 -141
- package/docs/plans/waves/wave-36.md +0 -146
- package/docs/plans/xlsx/README.md +0 -14
- package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
- package/docs/reference/cli-reference.md +0 -600
- package/docs/reference/coordination-and-closure.md +0 -487
- package/docs/reference/deep-research-report (15).md +0 -25
- package/docs/reference/docx/README.md +0 -10
- package/docs/reference/legal-checklist.md +0 -445
- package/docs/reference/live-proof-waves.md +0 -199
- package/docs/reference/ooxml-compliance.md +0 -129
- package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
- package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
- package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
- package/docs/reference/public-api.md +0 -456
- package/docs/reference/repository-guidance.md +0 -58
- package/docs/reference/runtime-config/README.md +0 -182
- package/docs/reference/runtime-config/claude.md +0 -110
- package/docs/reference/runtime-config/codex.md +0 -82
- package/docs/reference/runtime-config/opencode.md +0 -93
- package/docs/reference/sample-waves.md +0 -105
- package/docs/reference/skills.md +0 -237
- package/docs/reference/templates/AGENTS.md +0 -78
- package/docs/reference/templates/HEARTBEAT.md +0 -7
- package/docs/reference/templates/IDENTITY.md +0 -23
- package/docs/reference/templates/SOUL.md +0 -36
- package/docs/reference/templates/TOOLS.md +0 -40
- package/docs/reference/templates/USER.md +0 -17
- package/docs/reference/wave-control.md +0 -184
- package/docs/reference/wave-planning-lessons.md +0 -167
- package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
- package/docs/reference/word-review-editor-ux-guide.md +0 -253
- package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
- package/docs/research/agent-context-sources.md +0 -178
- package/docs/research/coordination-failure-review.md +0 -290
- package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
- package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
- package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
- package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
- package/docs/research/xlsx/raw/README.md +0 -13
- package/docs/roadmap.md +0 -174
- package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
- package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
- package/docs/xlsx-react/README.md +0 -38
- package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
- package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
- package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
- package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
- package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
- package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
- package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
- package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
- package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
- package/examples/README.md +0 -16
- package/memory/MEMORY.md +0 -24
- package/pnpm-workspace.yaml +0 -4
- package/scripts/check-no-authored-js.sh +0 -13
- package/scripts/context7-api-check.sh +0 -65
- package/scripts/context7-export-env.sh +0 -42
- package/scripts/run-context7-mcp.sh +0 -8
- package/scripts/run-workspace-tests.sh +0 -15
- package/scripts/start-wave-10-local.sh +0 -189
- package/scripts/wave-agent-attach.sh +0 -47
- package/scripts/wave-auto-answer.sh +0 -118
- package/scripts/wave-dashboard-attach.sh +0 -13
- package/scripts/wave-launch.sh +0 -273
- package/scripts/wave-overnight-supervisor.sh +0 -145
- package/scripts/wave-status.sh +0 -379
- package/scripts/wave-watch.sh +0 -231
- package/services/README.md +0 -17
- package/services/openxml-validator/Dockerfile +0 -29
- package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
- package/services/openxml-validator/Program.cs +0 -436
- package/services/openxml-validator/README.md +0 -152
- package/services/openxml-validator/railway.json +0 -16
- package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
- package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
- package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
- package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
- package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
- package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
- package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
- package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
- package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
- package/services/react-word-editor/Dockerfile +0 -26
- package/services/react-word-editor/README.md +0 -254
- package/services/react-word-editor/app/api/certification/route.ts +0 -79
- package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
- package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
- package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
- package/services/react-word-editor/app/api/exports/route.ts +0 -81
- package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
- package/services/react-word-editor/app/api/health/route.ts +0 -70
- package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
- package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
- package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
- package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
- package/services/react-word-editor/app/api/uploads/route.ts +0 -70
- package/services/react-word-editor/app/api/validate/route.ts +0 -310
- package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
- package/services/react-word-editor/app/certification/page.tsx +0 -32
- package/services/react-word-editor/app/dashboard/page.tsx +0 -7
- package/services/react-word-editor/app/demo/page.tsx +0 -30
- package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
- package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
- package/services/react-word-editor/app/fixtures/page.tsx +0 -7
- package/services/react-word-editor/app/globals.css +0 -121
- package/services/react-word-editor/app/layout.tsx +0 -32
- package/services/react-word-editor/app/page.tsx +0 -30
- package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
- package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
- package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
- package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
- package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
- package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
- package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
- package/services/react-word-editor/lib/certification-bundle.ts +0 -796
- package/services/react-word-editor/lib/certification-store.ts +0 -661
- package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
- package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
- package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
- package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
- package/services/react-word-editor/lib/editor-session.ts +0 -228
- package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
- package/services/react-word-editor/lib/harness-client.ts +0 -347
- package/services/react-word-editor/lib/harness-config.json +0 -30
- package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
- package/services/react-word-editor/lib/harness-config.ts +0 -21
- package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
- package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
- package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
- package/services/react-word-editor/lib/private-mode.ts +0 -61
- package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
- package/services/react-word-editor/lib/regression-report.ts +0 -896
- package/services/react-word-editor/lib/run-artifacts.ts +0 -934
- package/services/react-word-editor/lib/run-history.ts +0 -755
- package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
- package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
- package/services/react-word-editor/lib/storage.ts +0 -953
- package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
- package/services/react-word-editor/lib/validator-client.ts +0 -95
- package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
- package/services/react-word-editor/middleware.ts +0 -35
- package/services/react-word-editor/next-env.d.ts +0 -6
- package/services/react-word-editor/next.config.mjs +0 -15
- package/services/react-word-editor/package.json +0 -38
- package/services/react-word-editor/postcss.config.mjs +0 -8
- package/services/react-word-editor/railway.json +0 -21
- package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
- package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
- package/services/react-word-editor/tsconfig.json +0 -39
- package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
- package/skills/README.md +0 -48
- package/skills/domain-docx-compatibility/SKILL.md +0 -44
- package/skills/domain-docx-compatibility/skill.json +0 -19
- package/skills/domain-editor-architecture/SKILL.md +0 -49
- package/skills/domain-editor-architecture/skill.json +0 -19
- package/skills/domain-legal-review/SKILL.md +0 -39
- package/skills/domain-legal-review/skill.json +0 -19
- package/skills/provider-aws/SKILL.md +0 -117
- package/skills/provider-aws/adapters/claude.md +0 -1
- package/skills/provider-aws/adapters/codex.md +0 -1
- package/skills/provider-aws/references/service-verification.md +0 -39
- package/skills/provider-aws/skill.json +0 -54
- package/skills/provider-custom-deploy/SKILL.md +0 -64
- package/skills/provider-custom-deploy/skill.json +0 -50
- package/skills/provider-docker-compose/SKILL.md +0 -96
- package/skills/provider-docker-compose/adapters/local.md +0 -1
- package/skills/provider-docker-compose/skill.json +0 -53
- package/skills/provider-github-release/SKILL.md +0 -121
- package/skills/provider-github-release/adapters/claude.md +0 -1
- package/skills/provider-github-release/adapters/codex.md +0 -1
- package/skills/provider-github-release/skill.json +0 -55
- package/skills/provider-kubernetes/SKILL.md +0 -143
- package/skills/provider-kubernetes/adapters/claude.md +0 -1
- package/skills/provider-kubernetes/adapters/codex.md +0 -1
- package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
- package/skills/provider-kubernetes/skill.json +0 -52
- package/skills/provider-railway/SKILL.md +0 -123
- package/skills/provider-railway/adapters/claude.md +0 -1
- package/skills/provider-railway/adapters/codex.md +0 -1
- package/skills/provider-railway/adapters/local.md +0 -1
- package/skills/provider-railway/adapters/opencode.md +0 -1
- package/skills/provider-railway/references/verification-commands.md +0 -39
- package/skills/provider-railway/skill.json +0 -71
- package/skills/provider-ssh-manual/SKILL.md +0 -97
- package/skills/provider-ssh-manual/skill.json +0 -54
- package/skills/repo-coding-rules/SKILL.md +0 -55
- package/skills/repo-coding-rules/skill.json +0 -34
- package/skills/role-cont-eval/SKILL.md +0 -91
- package/skills/role-cont-eval/adapters/codex.md +0 -1
- package/skills/role-cont-eval/skill.json +0 -36
- package/skills/role-cont-qa/SKILL.md +0 -100
- package/skills/role-cont-qa/adapters/claude.md +0 -1
- package/skills/role-cont-qa/skill.json +0 -36
- package/skills/role-deploy/SKILL.md +0 -97
- package/skills/role-deploy/skill.json +0 -36
- package/skills/role-design/SKILL.md +0 -50
- package/skills/role-design/skill.json +0 -36
- package/skills/role-documentation/SKILL.md +0 -76
- package/skills/role-documentation/skill.json +0 -36
- package/skills/role-implementation/SKILL.md +0 -45
- package/skills/role-implementation/skill.json +0 -36
- package/skills/role-infra/SKILL.md +0 -81
- package/skills/role-infra/skill.json +0 -36
- package/skills/role-integration/SKILL.md +0 -91
- package/skills/role-integration/skill.json +0 -36
- package/skills/role-planner/SKILL.md +0 -39
- package/skills/role-planner/skill.json +0 -21
- package/skills/role-research/SKILL.md +0 -65
- package/skills/role-research/skill.json +0 -36
- package/skills/role-security/SKILL.md +0 -60
- package/skills/role-security/skill.json +0 -36
- package/skills/runtime-claude/SKILL.md +0 -66
- package/skills/runtime-claude/skill.json +0 -36
- package/skills/runtime-codex/SKILL.md +0 -58
- package/skills/runtime-codex/skill.json +0 -36
- package/skills/runtime-local/SKILL.md +0 -46
- package/skills/runtime-local/skill.json +0 -36
- package/skills/runtime-opencode/SKILL.md +0 -58
- package/skills/runtime-opencode/skill.json +0 -36
- package/skills/signal-hygiene/SKILL.md +0 -51
- package/skills/signal-hygiene/skill.json +0 -20
- package/skills/tui-design/SKILL.md +0 -77
- package/skills/tui-design/references/tui-design.md +0 -259
- package/skills/tui-design/skill.json +0 -36
- package/skills/wave-core/SKILL.md +0 -141
- package/skills/wave-core/references/marker-syntax.md +0 -70
- package/skills/wave-core/skill.json +0 -35
- package/test/README.md +0 -16
- package/test/core/formatting-commands.test.ts +0 -285
- package/test/core/image-commands.test.ts +0 -298
- package/test/core/mapping.test.ts +0 -186
- package/test/core/text-commands.test.ts +0 -176
- package/test/fixtures/docx/F01-basic-contract.docx +0 -0
- package/test/fixtures/docx/F01-basic-contract.md +0 -33
- package/test/fixtures/docx/F02-headings-styles.docx +0 -0
- package/test/fixtures/docx/F02-headings-styles.md +0 -33
- package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
- package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
- package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
- package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
- package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
- package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
- package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
- package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
- package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
- package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
- package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
- package/test/fixtures/docx/F08-hyperlinks.md +0 -33
- package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
- package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
- package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
- package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
- package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
- package/test/fixtures/docx/F11-redlines-basic.md +0 -33
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
- package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
- package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
- package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
- package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
- package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
- package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
- package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
- package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
- package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
- package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
- package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
- package/test/fixtures/docx/F18-content-controls-template.md +0 -33
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
- package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
- package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
- package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
- package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
- package/test/fixtures/docx/README.md +0 -74
- package/test/fixtures/docx/certification-manifest.json +0 -104
- package/test/fixtures/docx/fixtures.manifest.json +0 -196
- package/test/fixtures/encrypted-docx/README.md +0 -27
- package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
- package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
- package/test/fixtures/scenarios/docx/README.md +0 -25
- package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
- package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
- package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
- package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
- package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
- package/test/formats/xlsx/model/workbook.test.ts +0 -669
- package/test/helpers/dom-setup.ts +0 -124
- package/test/io/comment-roundtrip.test.ts +0 -272
- package/test/io/complex-content-roundtrip.test.ts +0 -632
- package/test/io/docx-compatibility-regression.test.ts +0 -199
- package/test/io/docx-session.test.ts +0 -1495
- package/test/io/footnotes-roundtrip.test.ts +0 -318
- package/test/io/headers-footers-roundtrip.test.ts +0 -547
- package/test/io/numbering-roundtrip.test.ts +0 -234
- package/test/io/package-reader.test.ts +0 -199
- package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
- package/test/io/preserved-package-roundtrip.test.ts +0 -365
- package/test/io/property-completeness.test.ts +0 -292
- package/test/io/revision-roundtrip.test.ts +0 -347
- package/test/io/structural-blocks.test.ts +0 -202
- package/test/io/table-media-roundtrip.test.ts +0 -448
- package/test/io/table-properties-roundtrip.test.ts +0 -569
- package/test/io/table-roundtrip.test.ts +0 -302
- package/test/io/text-roundtrip.test.ts +0 -344
- package/test/model/canonical-document.test.ts +0 -285
- package/test/preservation/opaque-fragment-store.test.ts +0 -121
- package/test/preservation/package-preservation.test.ts +0 -395
- package/test/preservation/store.test.ts +0 -84
- package/test/review/comment-remapping.test.ts +0 -220
- package/test/review/comment-store.test.ts +0 -180
- package/test/review/move-revisions.test.ts +0 -143
- package/test/review/property-change-revisions.test.ts +0 -225
- package/test/review/revision-actions.test.ts +0 -330
- package/test/review/revision-store.test.ts +0 -193
- package/test/runtime/session-capabilities.test.ts +0 -260
- package/test/runtime/table-commands.test.ts +0 -356
- package/test/runtime/table-schema.test.ts +0 -221
- package/test/runtime/tracked-changes-toggle.test.ts +0 -107
- package/test/ui/comment-review-surface.test.tsx +0 -114
- package/test/ui/reduced-motion-toggle.test.tsx +0 -137
- package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
- package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
- package/test/ui/word-review-editor.test.js +0 -188
- package/test/ui/word-review-editor.test.tsx +0 -280
- package/test/ui-tailwind/search-plugin.test.ts +0 -286
- package/test/validation/compatibility-engine.test.ts +0 -336
- package/test/validation/compatibility-report.test.ts +0 -189
- package/test/validation/low-priority-word-surfaces.test.ts +0 -282
- package/test/validation/malformed-doc.test.ts +0 -113
- package/test-results/.last-run.json +0 -4
- 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
|